Max*_* R. 48 python pip requirements.txt
开发一个Django Web应用程序,我有一个我需要在virtualenv中安装的软件包列表.说:
Django==1.3.1
--extra-index-url=http://dist.pinaxproject.com/dev/
Pinax==0.9b1.dev10
git+git://github.com/pinax/pinax-theme-bootstrap.git@cff4f5bbe9f87f0c67ee9ada9aa8ae82978f9890
# and other packages
Run Code Online (Sandbox Code Playgroud)
最初我在开发过程中一个接一个地手动安装它们.这安装了所需的依赖项,我最终pip freeze
在部署应用程序之前使用了它.
问题是,当我升级一些软件包时,一些依赖项不再使用也不需要,但它们仍然被列出pip freeze
.
现在,我想以这种方式建立一个新的virtualenv:
manual-requirements.txt
pip install -r manual-requirement.txt
(←问题,这不会安装依赖项)pip freeze -r manual-requirements.txt > full-requirements.txt
没有手动在新的virtualenv中重新安装软件包来获取它们的依赖关系的任何方法吗?这很容易出错,我希望自动化从不再需要的旧依赖项中清除virtualenv的过程.
编辑:实际上,pip 会安装未在需求文件中明确列出的依赖项,即使文档告诉我们这些文件是扁平的.关于我希望安装哪些依赖项我错了.我会让这个问题让任何人对pip没有安装所有依赖项有疑问.
Min*_*ing 48
简单地说,使用:
pip install -r requirement.txt
Run Code Online (Sandbox Code Playgroud)
它可以安装需求文件中列出的所有内容.
Pio*_*ost 29
没有手动在新的virtualenv中重新安装软件包来获取它们的依赖关系的任何方法吗?这很容易出错,我希望自动化从不再需要的旧依赖项中清除virtualenv的过程.
这就是pip-tools包的用途(来自https://github.com/nvie/pip-tools):
$ pip install --upgrade pip # pip-tools needs pip==6.1 or higher (!)
$ pip install pip-tools
Run Code Online (Sandbox Code Playgroud)
假设您有一个Flask项目,并希望将其固定用于生产.将以下行写入文件:
# requirements.in
Flask
Run Code Online (Sandbox Code Playgroud)
现在,运行pip-compile requirements.in:
$ pip-compile requirements.in
#
# This file is autogenerated by pip-compile
# Make changes in requirements.in, then run this to update:
#
# pip-compile requirements.in
#
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
Run Code Online (Sandbox Code Playgroud)
它将产生你的requirements.txt
所有Flask依赖项(和所有底层依赖项)固定.将此文件也置于版本控制之下,并定期重新运行pip-compile
以更新软件包.
现在您已经拥有了requirements.txt
,您可以使用它pip-sync
来更新您的虚拟环境以准确反映其中的内容.注意:这将安装/升级/卸载匹配requirements.txt
内容所需的所有内容.
$ pip-sync
Uninstalling flake8-2.4.1:
Successfully uninstalled flake8-2.4.1
Collecting click==4.1
Downloading click-4.1-py2.py3-none-any.whl (62kB)
100% |????????????????????????????????| 65kB 1.8MB/s
Found existing installation: click 4.0
Uninstalling click-4.0:
Successfully uninstalled click-4.0
Successfully installed click-4.1
Run Code Online (Sandbox Code Playgroud)
mac*_*mac 15
鉴于您对该问题的评论(您说单个包的执行安装按预期工作),我建议循环您的需求文件.在bash中:
#!/bin/sh
while read p; do
pip install $p
done < requirements.pip
Run Code Online (Sandbox Code Playgroud)
HTH!
扩展 Piotr 的答案,如果您还需要一种方法来确定要放入的内容requirements.in
,您可以首先使用pip-chill
来查找您拥有的所需软件包的最小集。通过组合这些工具,您可以显示安装每个包的依赖原因。完整的循环如下所示:
$ python3 -m venv venv
$ . venv/bin/activate
(venv)$ pip install --upgrade pip
(venv)$ pip install pip-tools pip-chill
(venv)$ pip-chill --no-version > requirements.in
(venv)$ pip-compile requirements.in
(venv)$ pip-sync
正如@Ming提到的:
pip install -r file.txt
Run Code Online (Sandbox Code Playgroud)
这是强制更新所有依赖项的简单行:
while read -r package; do pip install --upgrade --force-reinstall $package;done < pipfreeze.txt
Run Code Online (Sandbox Code Playgroud)
或者
pip list --outdated --format=freeze | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip install -U
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
100955 次 |
最近记录: |