Próbuję przenieść pakiet python2 na python3 (nie mój własny) przy użyciu sześciu, aby był zgodny z obydwoma. Jednak jeden z pakietów wymienionych w require.txt jest teraz zawarty w python3 stdlib, a wersja pypi nie działa w python3, więc chcę go warunkowo wykluczyć. Zrobienie tego w setup.py jest łatwe, mogę po prostu zrobić coś takiego:
if sys.version_info[0] == 2:
requirements += py2_requirements
else:
requirements += py3_requirements
Chciałbym jednak, aby wymagania.txt również odzwierciedlały poprawną listę. Nie mogę znaleźć nic na ten temat w dokumentacji pip. więc czy ktoś wie, jak to zrobić, czy w ogóle jest to możliwe?
Odpowiedzi:
Możesz użyć znaczników środowiska, aby to osiągnąć,
requirements.txt
ponieważpip 6.0
:SomeProject==5.4; python_version < '2.7' SomeProject; sys_platform == 'win32'
Jest również obsługiwany przez setuptools, deklarując dodatkowe wymagania w
setup.py
:setup( ... install_requires=[ 'six', 'humanize', ], extras_require={ ':python_version == "2.7"': [ 'ipaddress', ], }, )
Zobacz także specyfikatory wymagań . Oraz ciągi znaków dla wersji łańcuchowych odpowiednich poleceń Pythona.
źródło
sys.platform == "win32"
? Próbowałem użyć:sys.platform == "win32"
, alesetup()
funkcja wyświetla błąd „Nieprawidłowy znacznik środowiska”Możesz utworzyć wiele plików wymagań, umieścić te typowe pakiety we wspólnym pliku i dołączyć je do innego pliku wymagań pip z
-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 wymagania / python2.txt
źródło