[英]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.