[英]Python 3.4 not recognising package
在我的覆盆子pi 3模型BI上運行linux raspberrypi 4.4.48-v7這是一個debian發行版/風味。
我安裝了python 3.4。
sudo pip install enum34
回報 -
Requirement already satisfied: enum34 in /usr/local/lib/python3.4/dist-packages.
我正在嘗試安裝和運行這個微博藍牙交互的開源項目(但我相信我的問題與python配置有關) -
https://github.com/VRGhost/PyPush
我已經安裝了包和要求,但當我嘗試加載/提供包時,如下 -
./bin/serve.sh --ble_driver bluegiga --ble_device /dev/tty.usbmodem1 web_ui
我收到-
/usr/bin/python: No module named enum; 'PyPush' is a package and cannot be directly executed
我相信在失敗的serve.sh中的行是 -
exec python -m PyPush $*
如何讓python將PyPush識別為模塊? 我在網上找到的東西是指安裝的enum34。
在enum34
的特定情況下,如果您嘗試運行Python 3.4,則不需要它。 這個特定的包的Python 3.4的的一個補丁包, enum
到Python的早期版本。 你可以在Python 3.4+中import enum
。
您似乎安裝了至少三個版本的Python。 有兩個是正常的:Python 2.7和Python 3.x. 每個版本都有自己的包存儲庫,無法看到其他版本。 您似乎已安裝第三個自定義安裝。
當你運行pip install enum34
, pip --version
報告的Python pip --version
會獲得包。 如果python --version
和which python
不同,那么你將無法導入包,因為它沒有安裝在該版本的存儲庫中。
如果您需要使用已安裝的自定義Python版本,則可以通過在/usr/local/bin/
添加命令來運行它和正確版本的pip。 例如, /usr/local/bin/pip3.4
或/usr/local/bin/pip3
和/usr/local/bin/python3.4
或/usr/local/bin/python
。
也就是說,我懷疑你需要這個自定義版本的Python。 你應該真正使用你的發行版本,否則,將官方Python存儲庫添加到apt
並以這種方式安裝Python。
您的發行版可能是Raspbian ,正如您所說的Debian風格。 Debian附帶了Python 3和Python 2.這些安裝在/usr
下的系統中。 您似乎已經安裝了第三個Python,其中包含某種安裝在/usr/local
下的外部安裝程序3.4版。
通常在Linux中,您應該盡可能使用您的發行版的安裝程序。 在Debian的情況下,這意味着apt
。 如果您閱讀了一個教程,告訴您通過運行從某些.tar.gz
提取的腳本來安裝軟件,可能不會。 對於Debian,請進行apt search
以查看您所需的軟件版本是否可用,如果沒有,請查看項目(例如,Python,Node,Yarn)是否有將其官方存儲庫添加到您的發行版的說明。
所以,這里出現的問題可能是你正在運行pip
來安裝enum34
軟件包。 這可能是Python 2.7的pip版本。 您可以通過運行pip --version
來驗證這一點。 我的版本使用Python 3.5,您可以在下面看到:
$ pip --version pip 9.0.1 from /usr/local/lib/python3.5/site-packages (python 3.5) $
您可以看到我的Python 3版本安裝在/usr/local/
,但那是因為我在macOS上,我在操作系統的控制之外安裝Python 3。 在Debian上,幾乎總是應該通過apt
安裝Python,它安裝在/usr/
。
現在,當你運行pip install enum34
, pip --version
報告的Python pip --version
會獲得包。 如果這與python --version
報告的python --version
,則在運行該版本的python時將無法看到該包。 您仍然可以在系統和自定義安裝中安裝相同版本的Python。 當你運行which pip
和which python
,那些也應該在同一個路徑中。 如果which pip
說/usr/local/bin/pip
以及which python
說/usr/bin/python
,你仍會遇到同樣的問題。
您可以通過設置虛擬環境來忽略該問題,無論如何您應該這樣做,但這有點麻煩。 虛擬環境允許您為每個項目維護一組單獨的Python包,從而保護您免受需要同一包的不同版本的兩個項目的影響。 因此,它還可以防止您意外使用不同版本的pip和python。 然而,一開始它有點繁瑣,我不能推薦任何針對virtualenv
新手指南。
似乎無法訪問包路徑。 請執行下列操作。
/usr/local/lib/python3.4/dist-packages
。 您可以通過打印import sys;print (sys.path)
來檢查這一點import sys;print (sys.path)
它為您提供了python掃描庫的路徑列表。 如果路徑不存在則添加路徑。 python2.7
或python3
默認情況下python
是指python2.7
。 此外,python 3無法訪問Python 2.7庫, 請參閱此更改默認的python版本。 pip
會為python2
安裝庫,因此請使用pip3
來安裝python3
包。 檢查pip
在您的案例中安裝庫的位置,並檢查是否可以使用第1點訪問這些路徑。 我敢肯定,如果您檢查這4點,您的問題將得到解決。 我猜你的問題應該是第1點或第4點。
在Python查找文件的地方,有些東西被嚴重破壞了。
有兩個版本的Python - 遺留Python 2和當前的Python 3.默認情況下, python
可執行文件( /usr/bin/python
)指向Python 2, pip
可執行文件指向Python 2模塊。 Python 3分別使用python3
和pip3
。
但是,你的pip
(用於Python2)發現模塊安裝在/usr/local/lib/
python3.4
/dist-packages
。 它不應該從那里開始。
我不知道你是如何在這種情況下結束的,但在虛擬環境的幫助下它是可以挽救的。 只需創建新的虛擬環境,激活它,安裝所有依賴項並再次運行命令:
virtualenv --always-copy --python=python2 /path/to/virtualenv/directory
source activate /path/to/virtualenv/directory
pip install -r requirements/prod.txt
./bin/serve.sh --ble_driver bluegiga --ble_device /dev/tty.usbmodem1 web_ui
如果您沒有virtualenv
命令可用,請安裝它
apt install virtualenv
pip
用於Python 2.x, pip3
用於Python 3.x. 我還快速查看了為PyPush編寫的Python版本。 搜索print
通常是一種快速的方法。 GitHub使用print ...
而不是print(...)
返回多個結果,這意味着你有使用Python 2.x而不是Python 3.x編寫的源代碼。 你將不得不切換到2.x.
輸出
Requirement already satisfied: enum34 in /usr/local/lib/python3.4/dist-packages.
告訴你你的enum
包是為Python 3.x安裝的,但同時你得到了
/usr/bin/python: No module named enum; 'PyPush' is a package and cannot be directly executed
大多數發行版上的/usr/bin/python
仍然代表Python 2.x. 您可以使用/usr/bin/python --version
檢查它是哪個版本(2.x或3.x)以確保。
長篇大論 - 你有Python 3.x的enum
包,PyPush是為Python 2.x編寫的,你還需要Python 2.x的反向移植enum
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.