ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

有没有办法为我的Python应用程序提供基于平台的条件requirements.txt文件?

2019-09-26 19:56:08  阅读:124  来源: 互联网

标签:python pip


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

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

我想知道是否有一种方法我只能有一个requirements.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

解决方法:

您可以创建install.py脚本并通过脚本调用pip.

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.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

标签:python,pip
来源: https://codeday.me/bug/20190926/1821540.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有