无法导入肯定安装的python模块(机械化)
随着我的Ubuntu 12.04机器上的python(2.7.3)安装和导入模块持续的困扰。
在这里,我遇到了一个问题,那就是在我的机器和各种虚拟环境中确实已经安装了机械化。
我已经尝试从pip,easy_install安装,通过python setup.py install
从这个repo python setup.py install
: https : //github.com/abielr/mechanize 。
无济于事,每一次,我进入我的python互动,我得到:
Python 2.7.3 (default, Aug 1 2012, 05:14:39) [GCC 4.6.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import mechanize Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: No module named mechanize >>>
我安装的其他计算机没有问题(例如,Mac或Windows机器在工作,这是很好的,安装和导入正常)。
在这一点上,我很疯狂,只想完成一些工作。
更新信息(回复评论) :
输出easy_install mechanize
和path:
<me>@<host>:~$ sudo easy_install mechanize [sudo] password for <me>: Processing mechanize Writing /home/<me>/mechanize/setup.cfg Running setup.py -q bdist_egg --dist-dir /home/<me>/mechanize/egg-dist-tmp-zXwJ_d warning: no files found matching '*.html' under directory 'docs' warning: no files found matching '*.css' under directory 'docs' warning: no files found matching '*.js' under directory 'docs' mechanize 0.2.6.dev-20130112 is already the active version in easy-install.pth Installed /usr/local/lib/python2.7/dist-packages/mechanize-0.2.6.dev_20130112-py2.7.egg Processing dependencies for mechanize==0.2.6.dev-20130112 Finished processing dependencies for mechanize==0.2.6.dev-20130112 <me>@<host>:~$ ^C <me>@<host>:~$ which pip /home/<me>/bin/pip <me>@<host>:~$ which python /home/<me>/bin/python <me>@<host>:~$ which easy_install /home/<me>/bin/easy_install <me>@<host>:~$
第二次更新:似乎是机械化的东西,如果我通过PIP添加任何其他随机包,没有问题(在这个例子中html5lib
)
第三次更新(@DSM)
1) >>> sys.path ['', '/home/<me>/local/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg', '/home/<me>/local/lib/python2.7/site-packages/virtualenvwrapper-2.11-py2.7.egg', '/home/<me>/src/geopy', '/home/<me>/local/lib/python2.7/site-packages/BeautifulSoup-3.2.0-py2.7.egg', '/home/<me>/local/lib/python2.7/site-packages/django_sorting-0.1-py2.7.egg' ... <so on and so forth but mechanize is not here>] >>> 2) *pretty long output of which most looks like:* <me>@<host>:~$ ls -laR /usr/local/lib/python2.7/dist-packages/mech* /usr/local/lib/python2.7/dist-packages/mechanize: total 1144 ...lots of other files, pretty much same permissions... -rw-r--r-- 1 root staff 24916 Jan 11 01:19 _mechanize.py ...lots of other files... 3) >>> import imp >>> imp.find_module("mechanize") Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: No module named mechanize >>>
第四编辑 (这是变得荒谬:/):这是类似于我以前有过的问题( 完全删除和Ubuntu 12.04新安装的Python ),如果我用sudo运行的一切,没关系,但我没有知道我是否应该这样做…怎么了权限?
在我的情况下,这是权限问题。 该包以某种方式安装了root权限,其他用户只是不能运行它!
我有同样的问题:脚本与import colorama
投掷和ImportError,但sudo pip install colorama
告诉我“包已经安装”。
我的修复:运行没有sudo的 pip install colorama
: pip install colorama
。 然后,pip同意需要安装,安装它,我的脚本运行。
我的环境是Ubuntu 14.04 32位; 我想我在激活我的virtualenv之前和之后看到了这个。
更新 :甚至更好,使用python -m pip install <package>
。 这样做的好处是,因为你正在执行你想要的软件包的特定版本的python,所以pip将明确地把软件包安装到“正确的”python中。 同样, 不要在这种情况下使用sudo …然后你在正确的地方得到包,但可能与(不需要的)根权限。
这是pythonpath问题。
在我的情况下,我有python安装在:
/Library/Frameworks/Python.framework/Versions/2.6/bin/python,
python2.6中没有site-packages目录。
我通过pip安装的软件包(SOAPpy)位于
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/
站点包不在pythonpath中,我所做的只是将站点包永久添加到PYTHONPATH中。
- 打开terminal
- inputopen .bash_profile
-
在popup的文本文件中,在末尾添加以下行:
export PYTHONPATH = $ PYTHONPATH:/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/
- 保存文件,重新启动terminal,你就完成了
Python的导入机制的工作,真的,所以,无论是:
- 你的PYTHONPATH是错误的,
- 你的图书馆没有安装在你认为的地方
- 你有另一个同名的图书馆掩盖了这个
我一直在我的监视器上敲打我的头,直到一个年轻的时间实习生告诉我的秘密是在模块目录 “python setup.py install” 。
出于某种原因,从那里运行设置使其正常工作。
要清楚,如果你的模块的名字是“foo”:
[burnc7 (2016-06-21 15:28:49) git]# ls -l total 1 drwxr-xr-x 7 root root 118 Jun 21 15:22 foo [burnc7 (2016-06-21 15:28:51) git]# cd foo [burnc7 (2016-06-21 15:28:53) foo]# ls -l total 2 drwxr-xr-x 2 root root 93 Jun 21 15:23 foo -rw-r--r-- 1 root root 416 May 31 12:26 setup.py [burnc7 (2016-06-21 15:28:54) foo]# python setup.py install <--snip-->
如果您尝试通过调用其path来运行其他目录中的setup.py,则最终会进行一次borked安装。
不工作:
python /root/foo/setup.py install
工作:
cd /root/foo python setup.py install
在我的情况下,我已经运行pip install Django==1.11
,它不会从python
解释器导入。
通过pip的命令浏览我发现像这样的pip show
:
> pip show Django Name: Django Version: 1.11 ... Location: /usr/lib/python3.4/site-packages ...
注意位置说'3.4'。 我发现python
command被链接到python2.7
/usr/bin> ls -l python lrwxrwxrwx 1 root root 9 Mar 14 15:48 python -> python2.7
在旁边,我find了一个名为python3
的链接,所以我用它。 你也可以改变链接到python3.4
。 这也可以解决它。
我有这个确切的问题,但没有上述的答案工作。 这使我疯狂,直到我注意到,从父项目导入后,sys.path是不同的。 事实certificate,我已经使用importlib写一个小函数来导入不在项目层次结构中的文件。 坏主意:我忘记了我已经做到了。 更糟糕的是,导入过程被sys.path弄糟了 – 就这样离开了。 非常糟糕的主意。
解决的办法是停止,只需要把我需要的文件导入到项目中。 另一种方法是将文件放到自己的项目中,因为它需要不时重build,重build可能与重build主项目不一致。
我无法让我的PYTHONPATH正常工作。 我意识到增加export
固定的问题:
(做了工作)
export PYTHONPATH=$PYTHONPATH:~/test/site-packages
与
(不工作)
PYTHONPATH=$PYTHONPATH:~/test/site-packages
我有2.7和3.5安装在我的系统上试图用Python-Telegram-Bottesting一个电报机器人的问题。
在使用pdo和pip3进行安装之后,我无法使用sudo或不使用它。 我总是得到:
Traceback (most recent call last): File "telegram.py", line 2, in <module> from telegram.ext import Updater File "$USER/telegram.py", line 2, in <module> from telegram.ext import Updater ImportError: No module named 'telegram.ext'; 'telegram' is not a package
正确读取错误信息告诉我,python正在当前目录中查找telegram.py
。 而且,我有一个脚本,名为telegram.py,当我调用import
时候,这个脚本是由python加载的。
结论,确保你在当前的工作目录中没有任何package.py
当试图导入。 (并仔细阅读错误信息)。
当您通过easy_install
或pip
安装时,它是否成功完成? 什么是完整的输出? 你使用哪种python安装? 如果要将模块安装到系统目录(如果您正在使用系统python安装,也许),则可能需要在安装命令之前使用sudo
。 在你的问题中没有很多有用的信息可以解决,但是一些工具可能有助于包括:
-
echo $PYTHONPATH
和/或echo $PATH
:导入模块时,Python会search这些环境variables之一(目录列表,以分隔符为单位)。 导入问题通常是由于这些列表中没有正确的目录 -
which python
,which pip
,which easy_install
:这些会告诉你每个可执行文件的位置。 这可能有助于知道。 -
使用virtualenv ,就像@JesseBriggsbuild议的那样。 它与
pip
很好地协同工作,帮助您分离和pipe理单独的Python项目的模块和环境。
如果你学会了如何使用virtualenv(这非常简单),那么你将会拥有更less的这些问题。 你只需要获得virtualenv,然后你将使用本地(到项目)包。
它为我解决了很多头痛的path,版本等