【问题标题】:python version in requirements.txt issues with install requires in setup.pyrequirements.txt 中的 python 版本与 setup.py 中的安装要求有关
【发布时间】:2018-06-19 15:05:23
【问题描述】:

我有一个 requirements.txt 文件,其中包含类似的数据

py3DNS==3.1.0; python_version > '3'
scapy-python3==0.23; python_version > '3'
pyDNS==2.3.6; python_version < '3'
scapy==2.4.0; python_version < '3'

在安装库时指定python版本

在 setup.py 中我用来从 requirements.txt 文件中加载需求

requirements = open("requirements.txt").read().rsplit()
setup(
install_requires=requirements,
...)

得到了这个

requirements = ['py3DNS==3.1.0;', 'python_version', '>', "'3'", 'scapy-python3==0.23;', 'python_version', '>', "'3'", 'pyDNS==2.3.6;', 'python_version', '<', "'3'", 'scapy==2.4.0;', 'python_version', '<', "'3'"]

基本上不能用,我可以手动更改,但我想知道是否有任何通用的方法来做这些事情

【问题讨论】:

  • 嗯,scapy==2.4.0 与 python3 一起工作,我不明白为它设置开关的意义
  • 为什么要在setup.py 中手动处理requirements.txt?这是使用requirements.txt 的一种不同寻常的方式。 The usual way 是 pip install -r requirements.txt,目前尚不清楚使用 requirements.txt 的任何常见原因是否适用于此。
  • @Cukic0d 我不确定 scapy 的安装,但还有另一个 lib pydns 不适用于 python3
  • @user2357112 pip install -r requirements.txt 与终端一起使用,但我想将数据添加到 setup.py 文件中,以便用户可以运行 python setup.py install 并完成它。事实上,我可以使用 os.system 运行 pip 命令,但我认为这不是最好的方法。

标签: python python-3.x python-2.x setup.py requirements.txt


【解决方案1】:

尝试拆分成这样的行:

requirements = open("requirements.txt").read().split('\n')

产生

requirements = ["py3DNS==3.1.0; python_version > '3'",
"scapy-python3==0.23; python_version > '3'",
"pyDNS==2.3.6; python_version < '3'",
"scapy==2.4.0; python_version < '3'",
'']

您也可以执行以下操作来获取包和版本:

requirements = list(map(lambda x: x.split(';')[0], requirements)

得到

['py3DNS==3.1.0', 'scapy-python3==0.23', 'pyDNS==2.3.6', 'scapy==2.4.0', '']

【讨论】:

  • 有一个内置的splitlines() method;为什么不使用它?
  • 我本来打算用这个方法,但我想知道python setup.py是否可以与不同版本的requirements.txt一起工作,也许是一个可以自动为我完成任务的函数。
猜你喜欢
  • 1970-01-01
  • 2022-01-06
  • 1970-01-01
  • 1970-01-01
  • 2017-09-25
  • 2011-08-30
  • 2012-10-07
  • 2019-09-10
  • 2013-10-03
相关资源
最近更新 更多