如何让PyPI自动安装依赖
How to get PyPI to automatically install dependencies
如何在 PyPI 上发布包,以便自动安装所有依赖项,而不是由用户手动安装。
我在setup.py
和install_requires
中指定依赖如下:
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依赖。
如何启用依赖项的自动安装?
在构建和发布包时我应该使用虚拟环境吗?我该怎么做?
P.S。我对此完全陌生,所以我会感谢明确的代码或指向简单教程页面的链接。谢谢。
您的install_requires
应该是
的形式
...
install_requires=["numpy==1.15.4",
"sklearn==0.20.1",
"pandas==0.23.4"]
...
您也可以使用 >=
而不是 ==
以允许这些库的更新版本。
这是 TestPyPI 的一个不幸的(也是已知的)缺点:问题是 sklearn
在 TestPyPI 上不存在,并且通过从那里安装你的包,你告诉 pip
看那里也有依赖项。
相反,您应该发布到 PyPI,并使用 pre-release 版本以免污染您的版本。您可以稍后从项目中删除这些 pre-release。
您可以通过--extra-index-url
指定多个索引。将其指向 TestPyPI,以便从那里提取您的包,来自 PyPI 的部门:
$ pip install myPackage --extra-index-url=https://test.pypi.org/simple/
但是,问题的真正根源是您为 scikit-learn
包包含了错误的 dist 名称。将 sklearn
替换为 scikit-learn
:
setup(
...,
install_requires=['numpy', 'pandas', 'scikit-learn'],
)
我意识到从 test.PyPI 安装包不会安装所有包,因为其中一些包托管在 PyPI 而不是 test.PyPI。
当我在 PyPI 上将包发布为 pre-release 版本 (1.0a1) 而不是 test.PyPI 时,依赖项已正确安装。因此,问题纯粹是 test.PyPI.
这是我的方法。
我喜欢使用 requirements.txt 文件而不是将依赖项放在 install_requires 中,因为在开发过程中更容易 运行:
$ pip install -r requirements.txt
为了让 pip 自动安装依赖项,我在 setup.py 的顶部添加了 setuptools.setup():
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 的测试版本。
--upgrade 如果安装了以前的版本则强制升级。
--no-cache-dir 解决了快速重新发布时的缓存问题(pip 不获取新版本)
--extra-index 告诉 pip 如果在测试中找不到所需的包,请查看 pypi 的生产版本(即解决依赖项不可用的问题测试中)
如何在 PyPI 上发布包,以便自动安装所有依赖项,而不是由用户手动安装。
我在setup.py
和install_requires
中指定依赖如下:
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依赖。 如何启用依赖项的自动安装? 在构建和发布包时我应该使用虚拟环境吗?我该怎么做?
P.S。我对此完全陌生,所以我会感谢明确的代码或指向简单教程页面的链接。谢谢。
您的install_requires
应该是
...
install_requires=["numpy==1.15.4",
"sklearn==0.20.1",
"pandas==0.23.4"]
...
您也可以使用 >=
而不是 ==
以允许这些库的更新版本。
这是 TestPyPI 的一个不幸的(也是已知的)缺点:问题是 sklearn
在 TestPyPI 上不存在,并且通过从那里安装你的包,你告诉 pip
看那里也有依赖项。
相反,您应该发布到 PyPI,并使用 pre-release 版本以免污染您的版本。您可以稍后从项目中删除这些 pre-release。
您可以通过--extra-index-url
指定多个索引。将其指向 TestPyPI,以便从那里提取您的包,来自 PyPI 的部门:
$ pip install myPackage --extra-index-url=https://test.pypi.org/simple/
但是,问题的真正根源是您为 scikit-learn
包包含了错误的 dist 名称。将 sklearn
替换为 scikit-learn
:
setup(
...,
install_requires=['numpy', 'pandas', 'scikit-learn'],
)
我意识到从 test.PyPI 安装包不会安装所有包,因为其中一些包托管在 PyPI 而不是 test.PyPI。
当我在 PyPI 上将包发布为 pre-release 版本 (1.0a1) 而不是 test.PyPI 时,依赖项已正确安装。因此,问题纯粹是 test.PyPI.
这是我的方法。
我喜欢使用 requirements.txt 文件而不是将依赖项放在 install_requires 中,因为在开发过程中更容易 运行:
$ pip install -r requirements.txt
为了让 pip 自动安装依赖项,我在 setup.py 的顶部添加了 setuptools.setup():
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 的测试版本。
--upgrade 如果安装了以前的版本则强制升级。
--no-cache-dir 解决了快速重新发布时的缓存问题(pip 不获取新版本)
--extra-index 告诉 pip 如果在测试中找不到所需的包,请查看 pypi 的生产版本(即解决依赖项不可用的问题测试中)