当前位置: 首页 > 面试题库 >

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

东门胤
2023-03-14
问题内容

我有一个编写的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文件解决此问题的另一种方法应该是使用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


 类似资料:
  • 我们公司的一些团队目前正在“升级”一些遗留项目以使用Flyway。一个问题是存在多个具有已可用数据库对象(基线)的安装。 我们目前有一个用例(将来肯定会有更多),我们必须创建一些新的迁移脚本,但它们只能在满足数据库当前状态的特定条件时运行。 例如:运行此脚本,但仅当数据库中的表 X 包含数据 Y 时 我已经看到了Flyway条件数据库迁移,但对我来说,这似乎不是正确的解决方案,因为条件不仅仅是一些

  • 在我的应用程序中,我想允许用户打开Google Play商店来查看我的所有其他应用程序。在iOS中,我只是使用以下(示例)iTunes链接将它们全部拉上来:

  • 在我的空手道测试中,我需要将响应ID写到txt文件(或任何其他文件格式,如JSON),我想知道它是否有能力做到这一点,我在文档中没有看到其他的。如果是no,那么是否有一个简单的JavaScript函数来执行此操作?

  • 因此,我能够使用CryptoJS在javascript中实现这一点 这给了我一个JSON输出 然而,我不太熟悉Python,但我想知道是否有可能在python中执行相同类型的AES解密。谢啦

  • 我试图让我的UI显示两个按钮,其中一个稍微重叠在另一个,在一个全幅卡的中间。因为堆栈的宽度只能与其未定位的子级相同,所以我添加了一个宽度为double.infinity的SizedBox的未定位子级,以便给我一个画布来放置按钮,但我不知道该放什么作为SizedBox的高度。理想情况下,无论用户是在手机上还是在平板电脑上,我都希望这个小部件能够适当地调整自己的大小,所以我宁愿将SizedBox的高度

  • 在Borland VCL库中,几乎所有控件都有提示属性。在运行时,当您将鼠标放在相应的控件上时,当您移动鼠标时,一个带有提示文本的小框会弹出并再次消失,例如Windows资源管理器和其他程序中的帮助消息,当鼠标光标放在按钮上时。 JavaFX中是否有类似的概念(实际上,我使用的是ScalaFX)? 当然,我可以创建一个没有装饰的新舞台,添加一些鼠标监听器等,但是它不是已经在某个地方可用了吗?