【问题标题】:Python does not "see" a packagePython 没有“看到”一个包
【发布时间】:2011-12-03 22:01:22
【问题描述】:

我按照本教程在我的 CentOS 5.5 上安装 python2.7: http://villaroad.com/2010/10/rolling-python-2-6-2-on-centos-5-3/

安装 python 2.7 后,我得到了:

/opt/python2.7$ ls -la
total 24
drwxr-xr-x 6 root root 4096 2011-10-01 22:32 .
drwxr-xr-x 4 root root 4096 2011-10-01 22:32 ..
drwxr-xr-x 2 root root 4096 2011-10-09 19:51 bin
drwxr-xr-x 3 root root 4096 2011-10-01 22:32 include
drwxr-xr-x 4 root root 4096 2011-10-01 23:34 lib
drwxr-xr-x 3 root root 4096 2011-10-01 22:32 share

/opt/python2.7$ ls -la bin
total 88
drwxr-xr-x 2 root root  4096 2011-10-09 19:51 .
drwxr-xr-x 6 root root  4096 2011-10-01 22:32 ..
-rwxr-xr-x 1 root root   105 2011-10-01 22:32 2to3
-rwxr-xr-x 1 root root   296 2011-10-09 19:49 easy_install
-rwxr-xr-x 1 root root   304 2011-10-09 19:49 easy_install-2.7
-rwxr-xr-x 1 root root   103 2011-10-01 22:32 idle
-rwxr-xr-x 1 root root   254 2011-10-03 01:37 pip
-rwxr-xr-x 1 root root   262 2011-10-03 01:37 pip-2.7
-rwxr-xr-x 1 root root    88 2011-10-01 22:32 pydoc
-rwxr-xr-x 2 root root 11783 2011-10-01 23:34 python
-rwxr-xr-x 2 root root 11783 2011-10-01 23:34 python2.7
-rwxr-xr-x 1 root root  1628 2011-10-01 23:34 python2.7-config
lrwxrwxrwx 1 root root    16 2011-10-01 23:34 python-config -> python2.7-config
-rwxr-xr-x 1 root root 18551 2011-10-01 22:32 smtpd.py
-rwxr-xr-x 1 root root   289 2011-10-09 19:51 virtualenv

我使用/opt/python2.7/bin/virtualenv二进制在/var/www/myproj/env中创建环境

cd /var/www/myproj 
virtualenv --no-site-packages -p /opt/python2.7/bin/python \ 
     --clear --prompt="(myproj.com) " env

激活它,然后执行 pip install flask。 pip 将烧瓶安装到env/lib/python2.7/site-packages 并且它不在 sys.path 上

$ python
Python 2.7.2 (default, Oct  1 2011, 23:29:08)
[GCC 4.4.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import flask
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named flask
>>> import sys
>>> sys.path
['', '/opt/python2.7/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg', 
'/opt/python2.7/lib/python2.7/site-packages/pip-1.0.2-py2.7.egg', 
'/opt/python2.7/lib/python27.zip', '/opt/python2.7/lib/python2.7', 
'/opt/python2.7/lib/python2.7/plat-linux2', '/opt/python2.7/lib/python2.7/lib-tk', 
'/opt/python2.7/lib/python2.7/lib-old', '/opt/python2.7/lib/python2.7/lib-dynload', 
'/opt/python2.7/lib/python2.7/site-packages']

我尝试了同样的方法,但使用 easy_install 而不是 pip - 结果相同。

Flask 安装在env/lib/python2.7/site-packages 下,所以主要问题是:virtualenv 不是必须在 python 的 sys 路径中添加env/lib/python2.7/site-packages 吗?如果没有,我该怎么做更好:

  • 在运行时在 python 路径上添加适当的 site-packages 目录(例如,我的烧瓶应用程序中的 sys.path.insert(0, &lt;path to site-packages&gt;)
  • 修改系统的PYTHONPATH
  • 触发 virtualenv 的 after_install 方法将 &lt;path to site-packages&gt; 添加到 python 的路径

?

更多信息: 我已添加到用户和 root 的 ~/.bash_profile(在 Ubuntu 上为 ~/.profile)

alias python='/opt/python2.7/bin/python'
alias python2.7='/opt/python2.7/bin/python'
PATH=$PATH:/opt/python2.7/bin

source ~/.profile 哪个 python 产生 /usr/bin/python 是 2.6.4 (hmmmm...)

Python 2.6.4 (r264:75706, Dec  7 2009, 18:43:55)
[GCC 4.4.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()

很奇怪,但如果我运行 python,我会得到正确的版本:

$ python
Python 2.7.2 (default, Oct  1 2011, 23:29:08)
[GCC 4.4.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.

更奇怪的是,在遵循 python2.7 安装教程之后,我在which python 命令上得到了/opt/python2.7/bin/python。无论如何,问题就在那里,任何帮助表示赞赏。请考虑一下我是 python 新手,- 可能这是我在这里问的一个愚蠢的问题。

【问题讨论】:

    标签: python virtualenv pip flask


    【解决方案1】:

    每当您使用 Bash 运行命令时,它都会缓存命令的位置。这可能就是你在这里遇到的。使用hash -r 清理缓存。

    请注意,您的系统中现在有三个 python:系统的 2.6 位于 /usr/bin,2.7 位于 /opt/python2.7/bin/,virtualenv 的 2.7 位于 env/bin。只有最后一个安装了烧瓶。额外确保您正在拨打那个电话。

    另外,不要乱用 .bash_profile。尤其是 root 的 .bash_profile - 你不需要 root 权限来使用烧瓶,是吗?坚持使用 virtualenv,它更干净,而且你搞砸系统的可能性要低得多。 (话虽如此,$PATH 会被扫描以查找第一个匹配项,因此您需要 export PATH=/opt/python2.7/bin:$PATH 而不是 PATH=$PATH:/opt/python2.7/bin。但这是下次您需要更改 $PATH 时,而不是现在。)

    【讨论】:

    • 感谢您为正在发生的事情提供了很好的理由。事实上,我不得不打电话给env/bin/pythonwhich python 说那里有 python 二进制文件,但是我搞砸了alias python="/path/to/python2.7",因此系统知道python 是@987654328 的别名@,不是适当的二进制文件!哦,男孩,因为我的手弯曲所以很头疼 :-) 在某种程度上,我觉得添加别名是一个坏主意,但我只是依靠那个教程......
    • 是的,教程已经很老了——它可能是在virtualenv 存在之前编写的,然后匆忙为 Python 2.7 打了补丁。 virtualenv 正是为了让这些事情变得更容易而创建的 :)
    猜你喜欢
    • 1970-01-01
    • 2015-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-21
    • 2020-03-11
    相关资源
    最近更新 更多