2016-09-22 159 views
0

我想爲一個項目設置我的環境,但python無法找到我已用pip安裝的模塊。Python無法在虛擬環境中找到軟件包

我做了以下內容:

mkdir helloTwitter 
cd helloTwitter 
virtualenv myenv 
Installing setuptools, pip, wheel...done. 
source myenv/bin/activate 

pip install tweepy 
Collecting tweepy 
    Using cached tweepy-3.5.0-py2.py3-none-any.whl 
Collecting six>=1.7.3 (from tweepy) 
    Using cached six-1.10.0-py2.py3-none-any.whl 
Collecting requests>=2.4.3 (from tweepy) 
    Using cached requests-2.11.1-py2.py3-none-any.whl 
Collecting requests-oauthlib>=0.4.1 (from tweepy) 
    Using cached requests_oauthlib-0.6.2-py2.py3-none-any.whl 
Collecting oauthlib>=0.6.2 (from requests-oauthlib>=0.4.1->tweepy) 
Installing collected packages: six, requests, oauthlib, requests-oauthlib, tweepy 
Successfully installed oauthlib-2.0.0 requests-2.11.1 requests-oauthlib-0.6.2 six-1.10.0 tweepy-3.5.0 

當我嘗試導入它說,它無法找到該模塊。

$ PATH中的第一個條目是helloTwitter/myenv/bin 所有軟件包都顯示在環境site-packages目錄中。 我似乎正在使用正確的蟒蛇和點子。 的Python輸出helloTwitter/myenv/bin/python 哪個點子輸出helloTwitter/myenv/bin/pip

上我會錯在何處有何建議?

+1

請給我們輸入錯誤的堆棧跟蹤。 –

+0

你能告訴我在哪裏找到堆棧跟蹤? – Marcus

+0

>>當我嘗試導入模塊時,說它找不到。 - 那它究竟是怎麼「說」呢? –

回答

3

它看起來像你手動設置你的$PATH指向你的虛擬環境。 myenv/bin/activate腳本的全部內容是爲您處理此問題。

激活虛擬環境後,您使用pip安裝的任何軟件包將被放置在相關的venv site-packages目錄中(您的情況爲myenv/lib/python2.7/site-packages)。當您在虛擬環境中工作時(假定默認行爲),不需要像pip --user這樣的東西。這全是自動的。

運行後activate,你可以用find -iname tweepy來檢查你正在使用的python二進制文件。

別名也會導致問題。 which是一個外部命令,並不總是選擇這些。 A type -a python將清除這些。

快速測試可以通過直接運行helloTwitter/myenv/bin/python -c 'import tweepy'來完成。如果它的行爲與你正在運行的python不同(即不會拋出導入異常),那麼這就是你的問題。

希望有所幫助。

+0

type -a python python是/ Users/Marcus/CodeProjects/helloTwitter/myenv/bin/python python是/ usr/bin/python python是/ usr/bin/python。我不知道你的意思是直接運行python。我可以在這個目錄下執行一個腳本。例如python helloTwitter.py >>打印 成功 – Marcus

+0

當我嘗試運行導入時,我沒有得到任何異常或輸出:S – Marcus

0

好吧,我想我找到了一個解決方案,如果不是答案。 1.我卸載了軟件包並確保它不在系統或用戶中 2.我重新創建了虛擬環境。 3.我檢查了環境python和pip正在使用。 4.這次安裝我的軟件包時,我添加了--no-cache-dir選項。 軟件包安裝成功。 現在Python可以找到這個包。

derptop:environmentScience Marcus$ python 
>>> from tweepy import StreamListener 
>>> StreamListener 
<class 'tweepy.streaming.StreamListener'> 

我檢查了sys.path,現在包括從虛擬環境中,以前是不存在的site-packages目錄。

輸出的

sys.path

['', ....'/Users/Marcus/CodeProjects/environmentScience/myenv/lib/python2.7/site-packages'] 

至於我可以告訴sys.path被引用錯誤的站點包目錄。雖然我不知道爲什麼。我想知道是否使用緩存的點數導致站點包引用重置爲系統。