Saya mencoba mem-port paket python2 ke python3 (bukan milik saya) menggunakan enam sehingga kompatibel dengan keduanya. Namun salah satu paket yang terdaftar di requirement.txt sekarang disertakan dalam python3 stdlib dan versi pypi tidak berfungsi di python3 jadi saya ingin mengecualikannya secara bersyarat. Melakukan ini di setup.py mudah, saya bisa melakukan sesuatu seperti:
if sys.version_info[0] == 2:
requirements += py2_requirements
else:
requirements += py3_requirements
Tapi saya ingin Requirement.txt mencerminkan daftar yang benar juga. Saya tidak dapat menemukan apa pun tentang ini di dokumentasi pip. jadi apakah ada yang tahu bagaimana melakukannya, atau apakah itu mungkin?
Jawaban:
Anda dapat menggunakan penanda lingkungan untuk mencapai ini
requirements.txt
sejakpip 6.0
:SomeProject==5.4; python_version < '2.7' SomeProject; sys_platform == 'win32'
Ini juga didukung oleh setuptools dengan mendeklarasikan persyaratan tambahan di
setup.py
:setup( ... install_requires=[ 'six', 'humanize', ], extras_require={ ':python_version == "2.7"': [ 'ipaddress', ], }, )
Lihat juga penentu persyaratan . Dan Strings untuk versi string dari perintah Python yang sesuai.
sumber
sys.platform == "win32"
? Saya mencoba menggunakan:sys.platform == "win32"
, tetapi saya mendapatkan kesalahan "Penanda lingkungan tidak valid" darisetup()
fungsiAnda dapat membuat beberapa file persyaratan, meletakkan paket umum tersebut di file umum, dan memasukkannya ke dalam file persyaratan pip lain dengan
-r file_path
python2.txt:
-r base.txt Django==1.4 #python2 only packages
python3.txt:
-r base.txt Django==1.5 #python3 only packages
pip install -r persyaratan / python2.txt
sumber