pip无法安装install_requires中列出的软件包

时间:2019-07-03 22:27:41

标签: python pip pypi

我创建了一个Python程序包,将其上传到TestPyPI,然后尝试将其安装到新的虚拟环境中。 pip无法安装所需的软件包,但是如果我尝试使用pip install -r requirements.txt安装相同的软件包,则可以使用。

我按照Packaging Python Projects中列出的指南创建了setup.py文件。我将软件包上传到TestPyPI,并尝试使用Python 3.6.4pip 19.1.1将其安装到全新的虚拟环境中。

这是我的安装说明:pip install -i https://test.pypi.org/simple/ my-package-name==0.0.1

这是我在setuptools.setup通话中所拥有的(仅相关内容):

   packages=setuptools.find_packages(),
    classifiers=[
        "Programming Language :: Python :: 3.4",
        "Programming Language :: Python :: 3.5",
        "Programming Language :: Python :: 3.6",
        "Programming Language :: Python :: 3.7",
        'License :: OSI Approved :: MIT License',
        'Operating System :: OS Independent',
    ],
    install_requires=[
        "requests",
        "jsonpickle",
        "pandas",
        "matplotlib",
        "seaborn",
        "Pillow"
    ]

从成功安装matplotlib开始,但是稍后出现以下错误:

ERROR: Could not find a version that satisfies the requirement jsonpickle (from my-package-name==0.0.1) (from versions: none) ERROR: No matching distribution found for jsonpickle (from my-package-name==0.0.1)

我也尝试过指定软件包版本,但是后来我无法安装任何软件包。

如我所知,我可以使用pip install -r requirements.txt命令来安装软件包。

2 个答案:

答案 0 :(得分:0)

这是TestPyPI的不幸(众所周知)的缺点:问题是jsonpickle在TestPyPI上不存在,并且通过从那里安装软件包,您告诉pip查找依赖项在那里。

相反,您应该改为发布到PyPI,并使用预发行版本,以免污染您的版本。您可以稍后从项目中删除这些预发行版。

答案 1 :(得分:-1)

最好创建一个requirements.txt文件,然后在该文件中添加所需的包,然后在setup.py中打开该文件,将其放入列表中,然后将其添加到setup.py中。

例如

requirements.txt

requests
jsonpickle
pandas
matplotlib
seaborn
Pillow

和setup.py

with open('requirements.txt') as f:
    requirements = f.read().splitlines()

...

setup(
    name='package name',
    version='version',
    install_requires=requirements,
    ...
)

为什么这样? ->通过这种方式,您只需要维护requirements.txt,而无需在setup.py中重复相同的内容