簡體   English   中英

Python 3.4無法識別包

[英]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 enum34pip --version報告的Python pip --version會獲得包。 如果python --versionwhich 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 enum34pip --version報告的Python pip --version會獲得包。 如果這與python --version報告的python --version ,則在運行該版本的python時將無法看到該包。 您仍然可以在系統和自定義安裝中安裝相同版本的Python。 當你運行which pipwhich python ,那些也應該在同一個路徑中。 如果which pip/usr/local/bin/pip以及which python/usr/bin/python ,你仍會遇到同樣的問題。

您可以通過設置虛擬環境來忽略該問題,無論如何您應該這樣做,但這有點麻煩。 虛擬環境允許您為每個項目維護一組單獨的Python包,從而保護您免受需要同一包的不同版本的兩個項目的影響。 因此,它還可以防止您意外使用不同版本的pip和python。 然而,一開始它有點繁瑣,我不能推薦任何針對virtualenv新手指南。

似乎無法訪問包路徑。 請執行下列操作。

  1. 檢查python是否掃描libs的/usr/local/lib/python3.4/dist-packages 您可以通過打印import sys;print (sys.path)來檢查這一點import sys;print (sys.path)它為您提供了python掃描庫的路徑列表。 如果路徑不存在則添加路徑。
  2. 默認情況下檢查哪個版本的python正在使用python2.7python3默認情況下python是指python2.7 此外,python 3無法訪問Python 2.7庫, 請參閱此更改默認的python版本。
  3. 默認情況下, pip會為python2安裝庫,因此請使用pip3來安裝python3包。 檢查pip在您的案例中安裝庫的位置,並檢查是否可以使用第1點訪問這些路徑。
  4. 有些時候,shell腳本調用腳本時,有可能以不同的用戶(例如普通用戶,root)執行這些腳本,在這種情況下,所有這些環境配置如shell,路徑都會發生變化。 在這種情況下檢查所有上述要點。

我敢肯定,如果您檢查這4點,您的問題將得到解決。 我猜你的問題應該是第1點或第4點。

在Python查找文件的地方,有些東西被嚴重破壞了。

有兩個版本的Python - 遺留Python 2和當前的Python 3.默認情況下, python可執行文件( /usr/bin/python )指向Python 2, pip可執行文件指向Python 2模塊。 Python 3分別使用python3pip3

但是,你的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM