2016-11-21 32 views
0

這是Python 2.7.9,安裝在Debian Docker容器中,它不使用virtualenv。可以做的根本不同,但不管,我已經很直接的問題如下:?pip.main([「install」,「--user」,...]無法正常工作

爲什麼不這項工作

>>> import pip 
>>> pip.main(["install", "--user", "httmock"]) 
...installs httmock... 
>>> import httmock 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ImportError: No module named httmock 
>>> 

爲了便於比較,這工作得很好:

>>> import pip 
>>> pip.main(["install", "httmock"]) 
...installs httmock... 
>>> import httmock 
>>> 

謝謝。

+2

一個常用的配方:檢查'sys.path'。我懷疑'〜/ .local/lib/...'是默認在搜索路徑列表中。 – user3159253

+0

我認爲你是對的,它似乎沒有添加,直到我用'--user'安裝了某些東西。隨意回答... –

回答

1

user3159253一個有用的評論似乎對我的問題大約在同一時間我自己找到了這個。由於其他用戶沒有輸入他們的答案,我會這樣做。

顯然,本地用戶網站包不會自動添加到import的搜索選項中,直到您的應用程序的下一次運行。要強制它,請將運行pip install --user ...後的本地用戶網站包添加到路徑

pip.main(["install", "--user", "httmock"]) 

home_folder = os.path.expanduser("~") 
user_site_packages_folder = "{}/.local/lib/python2.7/site-packages".format(home_folder) 
if user_site_packages_folder not in sys.path: 
    sys.path.append(user_site_packages_folder) 

我想這只是在本地用戶已經安裝了軟件包的情況下才需要。我也想象一下,sys.path.append的實際調用會觸發特殊行爲,因爲將本地用戶網站包文件夾添加到路徑之前運行pip不起作用,但這不包括此答案的要點。