python3.4无法识别packag

2024-09-29 06:21:50 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的RaspberryPi3ModelB上,我运行的是LinuxRaspberryPi4.4.48-v7,这是一个debian发行版/风格。在

我已经安装了python3.4。在

sudo pip install enum34

返回-

^{pr2}$

我正试图安装并运行这个用于微博客蓝牙交互的开源项目(但我相信我的问题与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

我相信排队的人服务.sh失败是-

exec python -m PyPush $*

如何让python将PyPush识别为一个模块?我在网上找到的东西是指安装的enum34。在


Tags: installpipbin风格shsudo开源debian
3条回答

包路径似乎不可访问。请执行以下操作。在

  1. 检查python是否扫描/usr/local/lib/python3.4/dist-packages中的libs。您可以通过打印import sys;print (sys.path)来检查这一点,它提供了python扫描库的路径列表。如果没有路径,请添加路径。在
  2. 检查默认情况下使用的python版本是python2.7还是{},默认情况下python引用{}。另外,python3refer this无法访问python2.7库来更改默认Python版本。在
  3. 默认情况下,pippython2安装库,因此使用pip3python3安装包。检查pip在您的案例中安装了库的位置,还可以使用第1点检查这些路径是否可以访问。在
  4. 有时,当脚本被shell脚本调用时,可能会以不同的用户(例如:normal user,root)的身份执行这些脚本,在这种情况下,所有这些环境配置,如shell、路径更改。在这种情况下,请检查上述各点。在

我相信,如果你检查这4点,你的问题会得到解决。我猜你的问题应该是第1点或第4点。在

Python会在文件严重损坏的地方查找。在

Python有两个版本-遗留的python2和当前的python3。默认情况下,python可执行文件(/usr/bin/python)指向python2,pip可执行文件用于python2模块。Python3分别使用python3和{}。在

但是,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命令,请使用

^{pr2}$

enum34的特定情况下,如果您试图运行python3.4,则不需要它。这个特定的包是python3.4的enum到早期版本Python的一个backport。在python3.4+中,您只需import enum。在

您似乎至少安装了三个版本的Python。通常有两个版本:Python2.7和Python3.x。每个版本都有自己的包存储库,不能看到其他版本的。您似乎已经安装了第三个自定义安装。在

当您运行pip install enum34时,pip --version报告的Python版本将获得该包。如果python --version和{}不同,则您将无法导入该包,因为它没有安装在该版本的存储库中。在

如果您需要使用安装的Python自定义版本,您可以通过在命令前面加上/usr/local/bin/来运行它和正确版本的pip。E、 例如,/usr/local/bin/pip3.4/usr/local/bin/pip3和{}或{}。在

也就是说,我怀疑您是否需要这个定制版本的Python。您应该真正使用发行版的版本,否则,请将正式的Python存储库添加到apt中并以这种方式安装Python。在

您的发行版可能是Raspbian,正如您所说,这是Debian的一种风格。Debian附带了Python3和Python2。它们安装在^{下的系统中。您似乎已经使用某种外部安装程序(3.4版)安装了第三个Python,它安装在/usr/local下。在

一般来说,对于Linux,您应该尽可能使用发行版的安装程序。对于debian,这意味着apt。如果您阅读了一篇教程,告诉您通过运行从某个.tar.gz中提取的脚本来安装软件,那么可能就不会了。对于Debian,请执行apt search来查看您所需的软件版本是否可用,如果没有,请查看项目(例如Python、Node、Yarn)是否有向其中添加其官方存储库的说明你的分配。在

所以,这里出问题的地方可能是您正在运行pip来安装enum34包。这可能是python2.7的pip版本。您可以通过运行pip --version来验证这一点。我的版本使用Python 3.5,如下所示:

{cd22}

您可以看到我的python3版本安装在/usr/local/中,但这是因为我在macOS上,在那里我安装的python3不受OS的控制。在Debian上,Python几乎总是通过apt安装,它安装在/usr/中。在

现在,当您运行pip install enum34时,pip --version报告的Python版本将获得该包。如果该版本与python --version报告的版本不同,那么当您运行该版本的python时,您将无法看到该包。您仍然有可能在自定义安装中安装相同版本的Python。当您运行which pipwhich python时,它们也应该在同一路径中。如果which pip/usr/local/bin/pip,而{}说{},你仍然会遇到同样的问题。在

你可以通过设置一个虚拟环境来忽略这个问题,无论如何你都应该这样做,但是这有点麻烦。虚拟环境允许您为每个项目维护一组单独的Python包,这样可以防止两个项目需要同一个包的不同版本。因此,它还可以防止您意外地使用不同版本的pip和python。不过,一开始有点麻烦,我不能推荐任何新手指南virtualenv。在

相关问题 更多 >