如何让 PyPI 自动安装依赖项



如何在 PyPI 上发布包,以便自动安装所有依赖项,而不是由用户手动安装。

我在install_requires setup.py中指定依赖项,如下所示:

setuptools.setup(name='myPackage',
    version='1.0',
    packages=setuptools.find_packages(),
    include_package_data=True,
    classifiers=[
        'Programming Language :: Python :: 3',
        'Operating System :: OS Independent',
        'Topic :: Scientific/Engineering :: Bio-Informatics'
                ],
    install_requires=['numpy', 'pandas', 'sklearn'],
    python_requires='>=3'
        )

我有一个requirements.txt文件包含在我的MANIFEST.in中:

numpy==1.15.4
sklearn==0.20.1
pandas==0.23.4

但是,当我尝试安装软件包时,在test.pypi上发布后,出现以下错误:

Could not find a version that satisfies the requirement numpy (from myPackage==1.0.0) (from versions: )
No matching distribution found for sklearn (from myPackage==1.0.0)

这意味着 PyPI 不会安装 numpy 依赖项。如何启用依赖项的自动安装?在生成和发布包时,我是否应该使用虚拟环境?我该怎么做?

附言我对此完全陌生,所以我会欣赏显式代码或指向简单教程页面的链接。谢谢。

您可以通过 --extra-index-url 指定多个索引。将其指向TestPyPI,以便从那里提取您的软件包,从PyPI中提取deps:

$ pip install myPackage --extra-index-url=https://test.pypi.org/simple/

但是,问题的真正根源是您在scikit-learn包中包含错误的 dist 名称。将sklearn替换为scikit-learn

setup(
    ...,
    install_requires=['numpy', 'pandas', 'scikit-learn'],
)

这是TestPyPI的一个不幸的(也是已知的(缺点:问题是TestPyPI上不存在sklearn,通过从那里安装软件包,你告诉pip也在那里寻找依赖项。

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

我意识到从测试安装软件包。PyPI 不会安装所有软件包,因为其中一些软件包托管在 PyPI 上而不是测试。皮皮。

当我在 PyPI 上将包作为预发布版本 (1.0a1( 发布时,而不是在测试中。PyPI,依赖项已正确安装。因此,问题纯粹出在测试上。皮皮。

这是我

的方法。

我喜欢使用 requirements.txt 文件而不是将依赖项放在install_requires中,因为在开发过程中运行起来更容易:

$ pip install -r requirements.txt

为了让 pip 自动安装依赖项,我在 setuptools.setup(( 之前包含在 setup.py 顶部

requirements = []
with open('requirements.txt', 'r') as fh:
    for line in fh:
        requirements.append(line.strip())

然后在setuptools.setup((中:

install_requires = requirements

要安装:

pip install --index-url https://test.pypi.org/simple/ --upgrade --no-cache-dir --extra-index-url=https://pypi.org/simple/ <<package name>>
--

index-url 告诉 pip 使用 pypi 的测试版本。

-

-如果安装了以前的版本,则升级会强制升级。

--

no-cache-dir 解决了缓存问题,如果进行非常快速的重新发布(pip 不会选择新版本(

--

extra-index 告诉 pip 如果在测试中找不到所需的包,则在 pypi 的生产版本中查找(即解决依赖项在测试中不可用的问题(

您的install_requires应该是以下形式

...
install_requires=["numpy==1.15.4",
                  "sklearn==0.20.1",
                  "pandas==0.23.4"]
...

您还可以使用 >= 而不是 == 来允许这些库的最新版本。

相关内容

  • 没有找到相关文章

最新更新