2017-01-02 52 views
4

顛沛流離的環境中工作,一個python虛擬環境中,當我嘗試安裝使用Python包內的虛擬ENV,「命令點子」鏈接到全球蟒蛇PIP

(venv) [email protected]:~$ pip install <package_name> 

我收到一個權限錯誤:

error: could not create '/home/vagrant/venv/lib/python2.7/site-packages/<package_name>': Permission denied 

當我使用sudo來安裝:

(venv) [email protected]:~$ sudo pip install <package_name> 

安裝是成功的,但包沒有安裝在venv裏面,而是在全局python目錄中。

我可以成功地利用sudo並指定路徑點子安裝內部VENV軟件包:

(venv) [email protected]:~$ sudo /home/vagrant/venv/bin/pip install <package_name> 

這是相當令人費解,但。那麼我怎樣才能阻止sudo pip連接到全局python pip?

謝謝

+1

您是如何設置虛擬環境的? –

+3

你不應該試圖阻止sudo做它應該做的事情;您應該修復原始權限問題。 –

回答

3

問題的根源是,sudo默認情況下不作爲它執行的命令繼承用戶的環境。這就是你想要的 - 在此相信我。

對於您的情況,您的pip要麼被引導到它無法寫入的venv,要麼 - sudo下 - 引導到root不希望的環境。

您發佈的解決方案實際上是有效的:如果您使用sudo,一定要準確告訴它該做什麼,如何做以及該做什麼!上述所有內容都可以由用戶的環境變量來控制,所以謹慎是關鍵。

您也可以使用sudo -E,它會繼承調用用戶的環境,因此應該保留您的venv。儘管如此,請務必閱讀sudo的手冊頁或者搜索關於您可能遇到的所有問題的搜索結果。

0

像丹尼爾在評論中說的,你應該修復你的虛擬環境目錄的權限問題。這可能是你已經用sudo在該目錄中安裝了某些東西。或者你用sudo創建它。哪個不理想。我建議銷燬virtualenv,然後再與流浪用戶重新創建。如果您使用的是pyvenv,請確保您通過--copies選項。

由於user27 ...在他們的回答中表示,您使用sudo運行的點可能與您作爲流浪用戶運行的點不同。你可以隨時用which pip來檢查。

我建議從你的python虛擬環境中的which python開始。也許你激活了錯誤的虛擬環境,根本與你的流浪者無關。