python sürümüne bağlı olarak gereksinimler.txt


91

Altı kullanarak bir python2 paketini python3'e (benimki değil) aktarmaya çalışıyorum, böylece ikisiyle de uyumlu olsun. Bununla birlikte, gereksinimler.txt'de listelenen paketlerden biri artık python3 stdlib'e dahil edilmiş ve pypi sürümü python3'te çalışmıyor, bu yüzden onu koşullu olarak hariç tutmak istiyorum. Bunu setup.py'de yapmak kolaydır, şöyle bir şey yapabilirim:

if sys.version_info[0] == 2:
    requirements += py2_requirements
else:
    requirements += py3_requirements

Ancak gereksinimleri.txt'nin de doğru listeyi yansıtmasını istiyorum. Pip belgelerinde bununla ilgili hiçbir şey bulamıyorum. peki kimse bunu nasıl yapacağını biliyor mu, yoksa mümkün mü?


1
Lütfen kabul edilen yanıtı stackoverflow.com/a/33451105/99834 için değiştirin - bu, şüphesiz bunu uygulamanın doğru yoludur.
sorin

Yanıtlar:


140

Sen kullanabilirsiniz çevre işaretlerini de bunu başarmak için requirements.txttarihi pip 6.0:

SomeProject==5.4; python_version < '2.7'
SomeProject; sys_platform == 'win32'

Kurulum araçları tarafından da aşağıdaki ek gereksinimleri bildirerek desteklenir setup.py:

setup(
    ...
    install_requires=[
        'six',
        'humanize',
    ],
    extras_require={
        ':python_version == "2.7"': [
            'ipaddress',
        ],
    },
)

Ayrıca gereksinim belirleyicilere bakın . Ve karşılık gelen Python komutlarının dize sürümleri için Dizeler .


Güzel! Aynısını nasıl yapabilirim sys.platform == "win32"? Kullanmayı denedim :sys.platform == "win32", ancak setup()işlevden bir "Geçersiz ortam işaretçisi" hatası alıyorum
André Caron

3
Güncelleme: PEP 496 - Ortam Belirteçlerinin yerini , ortam belirteçleri için sözdizimi de dahil olmak üzere bağımlılık bildirimi sözdizimini tam olarak belirten PEP 508 - Python Yazılım Paketleri için Bağımlılık belirtimi almıştır .
jkdev

11

Birden fazla gereksinim dosyası oluşturabilir, bu ortak paketleri ortak bir dosyaya koyabilir ve bunları başka bir pip gereksinimleri dosyasına dahil edebilirsiniz. -r file_path

requirements/
  base.txt
  python2.txt
  python3.txt

python2.txt:

-r base.txt
Django==1.4 #python2 only packages

python3.txt:

-r base.txt
Django==1.5 #python3 only packages

pip yükleme -r gereksinimleri / python2.txt

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.