2011-08-29 89 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 

安裝成功,我能夠導入模塊。

相關問題