无法导入肯定安装的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 coloramapip 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中。

  1. 打开terminal
  2. inputopen .bash_profile
  3. 在popup的文本文件中,在末尾添加以下行:

    export PYTHONPATH = $ PYTHONPATH:/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/

  4. 保存文件,重新启动terminal,你就完成了

Python的导入机制的工作,真的,所以,无论是:

  1. 你的PYTHONPATH是错误的,
  2. 你的图书馆没有安装在你认为的地方
  3. 你有另一个同名的图书馆掩盖了这个

我一直在我的监视器上敲打我的头,直到一个年轻的时间实习生告诉我的秘密是在模块目录 “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_installpip安装时,它是否成功完成? 什么是完整的输出? 你使用哪种python安装? 如果要将模块安装到系统目录(如果您正在使用系统python安装,也许),则可能需要在安装命令之前使用sudo 。 在你的问题中没有很多有用的信息可以解决,但是一些工具可能有助于包括:

  • echo $PYTHONPATH和/或echo $PATH :导入模块时,Python会search这些环境variables之一(目录列表,以分隔符为单位)。 导入问题通常是由于这些列表中没有正确的目录

  • which pythonwhich pipwhich easy_install :这些会告诉你每个可执行文件的位置。 这可能有助于知道。

  • 使用virtualenv ,就像@JesseBriggsbuild议的那样。 它与pip很好地协同工作,帮助您分离和pipe理单独的Python项目的模块和环境。

如果你学会了如何使用virtualenv(这非常简单),那么你将会拥有更less的这些问题。 你只需要获得virtualenv,然后你将使用本地(到项目)包。

它为我解决了很多头痛的path,版本等