2017-08-08 265 views
0

由於各種原因,我需要在默認位置以外的地方安裝一個python模塊。 pip install --prefix會看起來正確的事情,但我有問題:pip安裝模塊和備用路徑

$ pip install --prefix /tmp/foo protobuf-3.2.0-cp27-cp27mu-manylinux1_x86_64.whl 
$ export PYTHONPATH=/tmp/foo/lib64/python2.7/site-packages 
$ python 
Python 2.7.5 (default, Nov 6 2016, 00:28:07) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import google.protobuf 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ImportError: No module named google.protobuf 
>>> import sys 
>>> sys.path.append('/tmp/foo/lib64/python2.7/site-packages') 
>>> sys.path 
['', '/tmp/foo/lib64/python2.7/site-packages', '/usr/lib64/python27.zip', 
'/usr/lib64/python2.7', '/usr/lib64/python2.7/plat-linux2', 
'/usr/lib64/python2.7/lib-tk', '/usr/lib64/python2.7/lib-old', 
'/usr/lib64/python2.7/lib-dynload', '/usr/lib64/python2.7/site-packages', 
'/usr/lib/python2.7/site-packages', '/tmp/foo/lib64/python2.7/site-packages'] 
>>> import google.protobuf 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ImportError: No module named google.protobuf 

但如果我安裝在默認位置(我不能在生產中做):

$ sudo pip install protobuf-3.2.0-cp27-cp27mu-manylinux1_x86_64.whl 
$ python 
Python 2.7.5 (default, Nov 6 2016, 00:28:07) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import google.protobuf 
>>> google.protobuf.__version__ 
'3.2.0' 

我想我的調用pip命令是錯誤的,或者在運行時需要做其他事情來獲取該模塊。任何意見將不勝感激。

+0

嘗試使用虛擬環境。 python –

回答

1

對你來說最好的解決方案是使用「virtualenv」。您可以安裝必需的軟件包,其範圍將僅限於虛擬環境。它也會忽略已經在你的主存儲庫中的所有以前安裝的軟件包。爲了快速入門,請點擊此鏈接:http://docs.python-guide.org/en/latest/dev/virtualenvs/

+0

這就是我需要的。謝謝。 –

+0

不客氣。 :) –

1

用途:

pip install --ignore-installed --install-option="--prefix=$PREFIX_PATH" package_name 

--ignore-installed是迫使所有依賴於使用這種新的前綴重新安裝。這看起來是你遇到的問題。您可以多次使用--install-option添加您可以在python setup.py安裝中使用的任何選項,其中包括--prefix

我不確定你爲什麼要這條路有所不同。你應該初始化一個虛擬環境,以保持你的模塊項目具體而不是這個廢話。但是,如果這種廢話對您的用例是必要的,請執行上述操作。