首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有一种方法可以为我的requirements.txt应用程序提供一个基于平台的条件文件?

问有没有一种方法可以为我的requirements.txt应用程序提供一个基于平台的条件文件?
EN

Stack Overflow用户
提问于 2015-03-23 23:22:02
回答 5查看 40.4K关注 0票数 108

我编写了一个python应用程序来兼容Linux和Windows平台。但是有一个问题..。Windows所需的python包之一与Linux不兼容。幸运的是,还有另一个包在Linux上提供了相同的功能。所有其他依赖项在这两个平台中都是兼容的。

我知道我可以有两个单独的需求文件来分别解决两个平台依赖关系。但是,类似于win_requirements.txt和linux_requirements.txt这样的方法并不是最好的方法。

我想知道是否有一种方法,我只能有一个requirements.txt文件,所以任何用户都可以使用pip install -r requirements.txt安装所有的依赖关系,而不管它们是哪个平台?

可能是什么??

代码语言:javascript
复制
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
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-03-23 23:39:14

您可以创建一个install.py脚本并按脚本调用pip。

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
-r requirements.txt
WMI>=1.4.9

linux.txt

代码语言:javascript
复制
-r requirements.txt
WMI>=1.4.9

然后,您可以只调用相当于平台的需求。

代码语言:javascript
复制
pip install -r windows.txt
pip install -r linux.txt
票数 20
EN

Stack Overflow用户

发布于 2016-02-24 22:33:48

您可以在分号之后添加某些条件要求。对于sys_platform和python_version特别有用。

示例:

代码语言:javascript
复制
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'

显然,您还可以排除库的特定版本:

代码语言:javascript
复制
futures>=3.0,!=3.0.5

它们是在佩普508和PEP 0345 (环境标志)中定义的,但是语法似乎遵循佩普0496草案。

票数 277
EN

Stack Overflow用户

发布于 2020-06-02 06:05:59

您可以在分号之后向任何包添加附加要求。您可以通过and,or限制任何具有多条件的包.更多条件:https://www.python.org/dev/peps/pep-0508/#environment-markers

例子:

代码语言:javascript
复制
futures>=3.0.5; python_version < '3.0'
futures>=3.0.5; python_version == '2.6' or python_version=='2.7'
futures>3 ; python_version >= "3.6" and sys_platform == "linux"
futures>3.3 ; python_version >= "3.6" and sys_platform == "darwin"
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29222269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档