Есть ли способ иметь условный файл требований .txt для моего приложения Python на платформе?
У меня есть приложение python, которое я написал для совместимости с платформами Linux и Windows. Однако есть одна проблема... Один из пакетов python, которые мне нужны для Windows, несовместим с Linux. К счастью, есть еще один пакет, который обеспечивает те же функции в Linux. Все другие зависимости совместимы на обеих платформах.
Я знаю, что у меня могло бы быть два отдельных файла требований для одновременного решения обеих зависимостей между платформами. Что-то вроде win_requirements.txt и linux_requirements.txt, однако этот подход не похож на лучший способ сделать это.
Интересно, есть ли способ, которым я могу иметь только один файл требований. txt, чтобы любой пользователь мог использовать pip install -r requirements.txt
для установки всех зависимостей независимо от того, на какой платформе они есть?
Может быть что-то вроде??:
SOAPpy>=0.12.22
pycrypto>=2.6.1
suds>=0.4
Python-ldap>=2.4.19
paramiko>=1.15.2
nose>=1.3.4
selenium>=2.44.0
bottle>=0.12.8
CherryPy>=3.6.0
pika>=0.9.14
if platform.system() == 'Linux':
wmi-client-wrapper>=0.0.12
else if platform.system() == 'Windows':
WMI>=1.4.9
Ответы
Ответ 1
Вы можете создать install.py
script и вызвать pip
на script.
import pip
_all_ = [
"SOAPpy>=0.12.22",
"pycrypto>=2.6.1",
"suds>=0.4",
"Python-ldap>=2.4.19",
"paramiko>=1.15.2",
"nose>=1.3.4",
"selenium>=2.44.0",
"bottle>=0.12.8",
"CherryPy>=3.6.0",
"pika>=0.9.14",
]
windows = ["wmi-client-wrapper>=0.0.12",]
linux = ["WMI>=1.4.9",]
darwin = []
def install(packages):
for package in packages:
pip.main(['install', package])
if __name__ == '__main__':
from sys import platform
install(_all_)
if platform == 'windows':
install(windows)
if platform.startswith('linux'):
install(linux)
if platform == 'darwin': # MacOS
install(darwin)
Другой способ разрешить эту проблему, используя только файлы requirements
, должен использовать наследование requirements
requirements.txt
SOAPpy>=0.12.22
pycrypto>=2.6.1
suds>=0.4
Python-ldap>=2.4.19
paramiko>=1.15.2
nose>=1.3.4
selenium>=2.44.0
bottle>=0.12.8
CherryPy>=3.6.0
windows.txt
-r requirements.txt
WMI>=1.4.9
linux.txt
-r requirements.txt
WMI>=1.4.9
Затем вы можете вызвать только требование, эквивалентное платформе.
pip install -r windows.txt
pip install -r linux.txt
Ответ 2
Вы можете добавить определенные условные требования после полуколонии, особенно полезной для sys_platform и python_version.
Примеры:
atomac==1.1.0; sys_platform == 'darwin'
futures>=3.0.5; python_version < '3.0'
futures>=3.0.5; python_version == '2.6' or python_version=='2.7'
Очевидно, вы также можете исключить определенные версии библиотеки:
futures>=3.0,!=3.0.5
Они определены в PEP 508 и PEP 0345 (маркеры среды), но синтаксис, как представляется, соответствует проекту PEP 0496.