Подтвердить что ты не робот

Есть ли способ иметь условный файл требований .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
4b9b3361

Ответ 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.