Birçok komut dosyası hem 2.x hem de 3.x'te çalışabilir. (Ben günlük olarak çalışmak bir grup var ve ben 2.x sadece çift sürümü için çeşitli açık kaynak kütüphaneleri çevirdik.)
birkaç nokta çok daha kolay hale:
- 2.x kullanıcıları için 2,7 veya 2,6 + gerektirir. Aksi takdirde, örneğin, parametrelerle yükseltilemez ve istisnalar yapamazsınız veya bunları değişkenlere ve diğer ciddi sınırlamalara yakalayamazsınız.
- 3.x kullanıcılar için 3.3+ veya en az 3.2+ gerekir. Tutarsız uyumsuzlukların çoğu (
u
önekinin alınması gibi) 3.2 veya 3.3'te tersine çevrildi.
- six kitaplığını kullanın.
__future__
ifadelerini kullanın. Daima
- sen (her zaman 8 bit),
unicode
(stdlib API'leri çoğu bekliyoruz olursa olsun) (eğer 8-bit isterseniz kodlamak gerekir) veya str
ve encode
ve decode
olarak bytes
demek olmadığı konusunda kafanın içinde net olması gerekli.
- Kodunuzda düzenli olarak
2to3
çalıştırın. (Ama körü körüne herşeyi yapmayın. Örneğin, d.keys()
veya map(f, l)
kullanıyorsunuz, çünkü list
geri dönüp dönmemeniz umrumda değil, bir uyarı alacaksınız, çünkü 2to3
bilmiyor Eğer, bunun yerine hem çalışan kod yazmak için çalışmakla, Alternatif
). care 2.x üzerinde çalışan kod yazmak, ancak otomatik olarak 3.x kodu çalıştırması 2to3
tarafından dönüştürülebilir ve yok Yükleme işleminizin bu bölümünü yapın (setup.py
, if sys.version_info >= (3, 0):
'da 2to3
adımını yapın).
Düzenlemenizden, çoğunlukla # ile neyi koyacağınız ile ilgili olduğunuzu sanıyoruz! hat. Bunun için:
Sonra bu
env
ilk etapta çalışması garanti edilmez çalışmak ama garanti edilmez
/usr/bin/env python
... Sen aslında güvenebilirsiniz: hemen üzerinde
- Platform/dağıtıma malzemeleri tek 2.x,
python
hemen hemen tüm sistemde Python 2.
- olan herhangi bir sistem,
python
hemen hemen tüm sistemin platformu üzerinde Python 2.
- platformu/dağıtıma malzemeleri hem burada/gün sadece 3 tedarik eder.x (şu anda çok nadir olmakla birlikte, muhtemelen sonunda daha yaygın olacak olan),
python
Ancak
Python 3. geçerli:
- bir sistemde nerede platformu malzemeleri ne, eğer yönetici Sadece yüklü 3.x, muhtemelen (2013 başından itibaren) değil
python
olarak kullanılabilir. Bu konuda yapabileceğiniz fazla bir şey yok.
sonuncusu ciddi bir sorun ise, python
çalışır sh yazılmış bir başlatıcısı senaryo, ekleyerek etrafında çalışabilir ve başarısız olursa o zaman python3
çalışır.
Bunu yapmanın en iyi yolu, başlatıcısı komut dosyasının kendisini Python komut dosyanızdaki shebang yorumlayıcısı olarak belirtmektir. Linux bunu halledebilir, ancak yapılandırılabilir ve en azından bazı dağıtımlar bunu varsayılan olarak devre dışı bırakır — ve çoğu diğer * nix sistemleri bunu yapamaz.
Bu işe yaramazsa, bir sonraki en iyi seçenek kullanıcı başlatıcısı komut yani, yerine ./check.py
ait ./check.sh
ve sağ Python yorumlayıcısı dışarı check.sh
rakamlar yapacaklarını anlatmak çalıştırmak yapmaktır ve için $python ./check.py
çalışır kullanıcı.
Gerçekten zorlanmak istiyorsanız, Python komut dosyasını kabuk betiği içinde heredoc olarak gömebilirsiniz, böylece yalnızca bir dosyayı dağıtmanız gerekir. ./check.sh
çalıştırırlar ve doğru Python'u bulur ve heredoc üzerinde çalıştırır.
emin ... her ikisi de ortak dil yapıları kullandığınız sürece ... –
problem ilk satır #/usr/bin/env python [2.x | 3.x] nasıl yazılır Tercüman bul – xielingyun
Bu neden bir problem? Sadece 'python' çalıştırın; sadece 2.x ile bir sistemde veya 2.x ve 3.x ile 2.x olacaktır; Sadece 3.x ile bir sistemde, 3.x olmalıdır. – abarnert