gpt4 book ai didi

python - 属性错误 : 'ParsedRequirement' object has no attribute 'req'

转载 作者:行者123 更新时间:2023-12-02 17:45:06 28 4
gpt4 key购买 nike

我有一层为 docker 文件

RUN python setup.py develop
我正在使用具有三个阶段的多阶段构建,这是所有阶段都具有相同基础镜像的第一阶段,尽管我不认为这是 dockerfile 的问题,但似乎是 python 及其方式的问题被执行
处理基础镜像 python:3.7-slim我正在使用下面的 Travis CI 构建这个 dockerfile
Travis 上的版本信息:
docker version
Client:
Version: 17.09.0-ce
API version: 1.32
Go version: go1.8.3
Git commit: afdb6d4
Built: Tue Sep 26 22:42:38 2017
OS/Arch: linux/amd64
Server:
Version: 17.09.0-ce
API version: 1.32 (minimum version 1.12)
Go version: go1.8.3
Git commit: afdb6d4
Built: Tue Sep 26 22:41:20 2017
OS/Arch: linux/amd64
Experimental: false
我得到以下错误
AttributeError: 'ParsedRequirement' object has no attribute 'req'
令人惊讶的是,我能够在我的 mac 机器上使用 docker 版本 19.03.2这是我的 setup.py文件
import os
import shutil
import inspect
import platform
from setuptools import setup
import setuptools
try:
from pip.req import parse_requirements
except ImportError:
from pip._internal.req import parse_requirements

EMAIL_CONF = 'email.conf'
DL_CONF = 'dl.conf'
LINUX_CONFDIR = os.path.expanduser('~') + '/.config/bassa/'
WIN_CONFDIR = os.path.expanduser('~') + '/%app_data%/bassa/'
OSX_CONFDIR = os.path.expanduser('~') + '/.config/bassa/'

# Utility function to read the README file.
def read(file_name):
return open(os.path.join(os.path.dirname(__file__), file_name)).read()

base_dir = os.path.dirname(os.path.abspath(__file__))
requirements_path = os.path.join(base_dir, 'requirements.txt')

install_reqs = parse_requirements(requirements_path, session=False)

requirements = [str(ir.req) for ir in install_reqs]

### Set configs ###
if platform.system() == 'Linux':
configdir = LINUX_CONFDIR
elif platform.system() == 'Windows':
configdir = WIN_CONFDIR
elif platform.system() == 'Darwin':
configdir = OSX_CONFDIR
if not os.path.exists(configdir):
os.makedirs(configdir)

email_conf_location = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) + "/" + EMAIL_CONF
dl_conf_location = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) + "/" + DL_CONF
shutil.copyfile(email_conf_location, configdir + EMAIL_CONF)
shutil.copyfile(dl_conf_location, configdir + DL_CONF)

###/ Set configs ###

setup(
...
)

请帮我解决这个问题。

最佳答案

更新:
* 请注意,在我的情况下不支持更新 pip 和 pip-tools。那么我的答案中的解决方法会有所帮助。
* 如果支持更新 pip 和 pip-tools 到兼容版本,请引用 Gnnr's answerHeapify's answer
我终于得到了修复\o/

install_reqs = parse_requirements(requirements_path, session=False)
起初,我通过简单地记录来检查 Travis 上的 install_reqs 是什么,发现它是 ParsedRequirement 对象的列表。我还发现这个类是在 req_file.py 中定义的.我去查看了 req_file.py 的源代码 here在 GitHub 上。我发现没有这样的属性叫 req但它是 requirement .所以有两个版本的 parse_requirements函数,所以我使用 try 和 except 块处理了这个问题。
# Generator must be converted to list, or we will only have one chance to read each element, meaning that the first requirement will be skipped.
requirements = list(requirements)
try:
requirements = [str(ir.req) for ir in install_reqs]
except:
requirements = [str(ir.requirement) for ir in install_reqs]
现在它与两个版本都兼容\0/

关于python - 属性错误 : 'ParsedRequirement' object has no attribute 'req' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62114945/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com