2011-08-29 53 views
612

这里的问题是如何根据来自本地目录的requirements.txt来安装软件包?

我有一个requirements.txt看起来像:

BeautifulSoup==3.2.0 
Django==1.3 
Fabric==1.2.0 
Jinja2==2.5.5 
PyYAML==3.09 
Pygments==1.4 
SQLAlchemy==0.7.1 
South==0.7.3 
amqplib==0.6.1 
anyjson==0.3 
... 

我有一个包含所有包+其他本地存档目录。

我已经在激活它创造了

bin/virtualenv testing 

一个新的virtualenv,我试图根据从本地存档目录requirements.txt安装软件包。

source bin/activate 
pip install -r /path/to/requirements.txt -f file:///path/to/archive/ 

我得到了一些输出似乎表明,安装精细

Downloading/unpacking Fabric==1.2.0 (from -r ../testing/requirements.txt (line 3)) 
    Running setup.py egg_info for package Fabric 
    warning: no previously-included files matching '*' found under directory 'docs/_build' 
    warning: no files found matching 'fabfile.py' 
Downloading/unpacking South==0.7.3 (from -r ../testing/requirements.txt (line 8)) 
    Running setup.py egg_info for package South 
.... 

但后来检查发现没有包的安装是否正确。我无法导入软件包,在我的virtualenv的site-packages目录中找不到任何软件包。那么出了什么问题?

+3

您是否尝试过使用'--no-index',所以它甚至没有看PyPI? –

+1

你已经删除了错误信息。它通常在底部附近。 – bukzor

+0

您可以使用文件路径而不是软件包名称,这意味着您必须更改requirements.txt文件,但保持pip install命令相同。 – asafge

回答

344

这个工作对我来说:

$ pip install -r requirements.txt --no-index --find-links file:///tmp/packages 

--no-index - 忽略封装指数(只盯着--find-links网址代替)。

-f, --find-links <URL> - 如果是html文件的URL或路径,则解析链接到存档。 如果一个本地路径或file:// URL是一个目录,则在目录列表中查找存档。

+5

**有关'--no-index'的信息可以从命令pip帮助安装**'--no-index'忽略软件包索引(而不是查看'--find-links' URL)。 **从命令pip帮助安装'--find-links'的信息**'-f','--find-links '如果一个url或者一个html文件的路径,然后解析链接到档案。如果一个本地路径或文件:// url是一个目录,然后在目录列表中查找存档。 – AWrightIV

+0

//,这可能是一个非常优雅的解决方案,尤其是考虑到与供应商的永恒斗争:http://bitprophet.org/blog/2012/06/07/on-vendorizing/ –

+0

感谢它对我的工作 –

908

我已阅读上述内容,意识到这是一个老问题,但在我的谷歌的搜索结果,因此这里的顶部是完全没有解决,仍然是一个适合所有人的一个答案:

pip install -r /path/to/requirements.txt 
+163

我意识到这个答案没有解决原始问题,但它回答了我在Google上发现这个问题时的问题...... – Jonathan

+0

原始问题已更改 - 请注意他现在如何使用/path/to/requirements.txt 。 –

+7

@MikeLyons很确定这个问题实际上并没有改变 - 没有编辑历史。 –

95

有关的virtualenv在requirements.txt文件中安装所有文件。

  1. cd到requirements.txt所在的目录
  2. 激活你的virtualenv
  3. 运行:pip install -r requirements.txt在你的shell
+2

“pyenv virtualenv pip install requirements.txt not working”为了Google的缘故... – Jerad

11

通常情况下,你会想从一个地方档案快速安装,而不探究PyPI。

首先,下载满足您的要求的档案:

$ pip install --download <DIR> -r requirements.txt 

然后,安装使用–find-links–no-index

$ pip install --no-index --find-links=[file://]<DIR> -r requirements.txt 
+0

这太好了,像魅力一样起作用! TNX –

43

我也有类似的问题。我尝试这样做:

pip install -U -r requirements.txt 

(-U =如果已经安装了更新)

但问题仍在继续。我意识到一些用于开发的通用库被遗漏了。

sudo apt-get install libtiff5-dev libjpeg8-dev zlib1g-dev liblcms2-dev libwebp-dev tcl8.6-dev tk8.6-dev python-tk 

我不知道这是否会对您有所帮助。

17
pip install -r requirements.txt 

有关详细信息,请查看帮助选项。

pip install --help 

我们可以找到的选项 '-r'

-r,--requirement从给定的要求,文件安装。此选项可以 多次使用。

一些常用PIP安装选项的详细信息:(这是PIP的帮助选项安装命令)

enter image description here

此外,上面是一套完整的方案。请使用pip install --help获取完整的选项列表。

9

我有很多的系统已经打乱开发商“下,他们在互联网上找到的方向”工作。这是非常常见的,你pip和你python不看相同的路径/ site-packages中。出于这个原因,当我遇到奇怪我开始做这个:

$ python -c 'import sys; print(sys.path)' 
['', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', 
'/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', 
'/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', 
'/usr/lib/python2.7/dist-packages'] 

$ pip --version 
pip 9.0.1 from /usr/local/lib/python2.7/dist-packages (python 2.7) 

这是一个快乐的系统

下面是一个不高兴系统。 (或者至少是一个幸福无知系统,使他人快乐。)

$ pip --version 
pip 9.0.1 from /usr/local/lib/python3.6/site-packages (python 3.6) 

$ python -c 'import sys; print(sys.path)' 
['', '/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python27.zip', 
'/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7', 
'/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin', 
'/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac', 
'/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages', 
'/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk', 
'/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old', 
'/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload', 
'/usr/local/lib/python2.7/site-packages'] 

$ which pip pip2 pip3 
/usr/local/bin/pip 
/usr/local/bin/pip3 

这是不高兴因为pip是使用/usr/local/lib/python3.6/site-packagespython是(python3.6和)使用(python2.7和) /usr/local/lib/python2.7/site-packages

当我要确保我安装要求,以蟒蛇,我这样做:

$ which -a python python2 python3 
/usr/local/bin/python 
/usr/bin/python 
/usr/local/bin/python2 
/usr/local/bin/python3 

$ /usr/bin/python -m pip install -r requirements.txt 

你听说过,“如果没坏,不要试图去解决它。”的是,DevOps的版本是,“如果你没有打破它,你可以解决它,不要试图去解决它。”

2

安装虚拟ENV WITH PYTHON3:

我有同样的问题。上述解决方案都不适合我。我找到了解决方案。

起初,我创造了这样我的虚拟ENV:

sudo apt-get install python3-pip 
sudo pip3 install virtualenv 
virtualenv myenv 

它没有工作。我能够安装requirements.txt,但无法导入模块。所以,我想,

virtualenv -p python3 myenv 

使用激活环境:

source myenv/bin/activate 

现在我使用安装在requirements.txt:

pip3 install -r requirements.txt 

安装成功,我能够导入模块。

相关问题