pip:安装依赖项的依赖项

7

我想手动安装我正在编写的 Python 包的所有要求。 为此,我创建了文件 requirements.txt 并逐行添加了依赖项:

$ cat requirements.txt
meshio
numpy

在运行过程中

$ pip install -r requirements.txt

那两个包已经成功安装了,但我注意到meshio的依赖关系没有被安装(即其requirements.txt中列出的所有内容)。这并不奇怪,pip怎么可能知道呢?

有没有一种机制可以使用pip安装整个依赖树?

3个回答

9
原来要安装依赖项,包需要列出其依赖项。
install_requires=[
    'numpy',
    'pyyaml'
],

setup.pysetup()中,而不是在requirements.txt中。

如果存在传递依赖关系,为了确保pip获取所有依赖项的正确版本,您需要分析所有setup.py文件,而pip-tools可以帮助您完成此操作。 - JR Utily

7

您可能会对pip-tools感兴趣,这是一个与所有底层依赖项相结合的requirements.txt文件构建有关的Python包。它可以通过pip进行安装:

pip install --upgrade pip  # pip-tools needs pip>=6.
pip install pip-tools

安装完成后,您可以使用pip-compile命令生成您的要求文件。例如,假设您正在开发一个Flask项目,那么您需要执行以下步骤: 在文件中写入以下行:
Flask

运行 pip-compile <your-file> 命令,会生成包含所有依赖项的 requirements.txt 文件,并将其版本锁定。你可以再次运行 pip-compile 命令来更新这些依赖项。你的输出文件将如下所示:
#
# This file is autogenerated by pip-compile
# Make changes in requirements.in, then run this to update:
#
#    pip-compile <your-file>
#
flask==0.10.1
itsdangerous==0.24        # via flask
jinja2==2.7.3             # via flask
markupsafe==0.23          # via jinja2
werkzeug==0.10.4          # via flask

我已经在开发中使用pip-tools,没想到它也适用于安装生产环境所需的库。这真是太方便了!非常感谢。 - JR Utily

0

我不确定这是否是您需要的。但这是我解决这个问题的方法。我为每个Python项目创建一个虚拟环境

cd my_project_folder
virtualenv venv # choose the python interpreter you need ;)
source venv/bin/activate

然后我为该项目安装所有所需的软件包。

pip install <what ever packages you need>

如果您需要创建一个 requirements.txt 文件,可以使用以下命令。
pip freeze > requirements.txt  # including the installed version of each package

要退出虚拟环境,只需键入deactivate。希望这能帮到您...

这里也有详细描述在这里


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接