【问题标题】:pip installed packages not in sys.pathpip 安装的软件包不在 sys.path 中
【发布时间】:2012-06-23 20:48:02
【问题描述】:

我是蟒蛇菜鸟。已经安装了 virtualenv 和 pip,在我看来一切正常,但是当尝试导入通过 pip 安装的包时,python 找不到它们。我在 OS X 上并且在/usr/bin 中有系统 python 2.6,因此通过包安装程序将 2.7 安装到/usr/local/bin 中。在安装 pip 和 virtualenv 时,我通过将 PATH 设置为首先使用 /usr/local/bin 来确保正在使用 2.7 python。

(pysite)sbeam@pris ~/Sites]$ pip freeze
Django==1.4
Markdown==2.1.1
psycopg2==2.4.5
wsgiref==0.1.2

(pysite)sbeam@pris ~/Sites]$ echo $PYTHONPATH

(pysite)sbeam@pris ~/Sites]$ which python
/Users/sbeam/.virtualenvs/pysite/bin/python

(pysite)sbeam@pris ~/Sites]$ env | grep VIRTUAL
VIRTUALENVWRAPPER_PROJECT_FILENAME=.project
VIRTUAL_ENV=/Users/sbeam/.virtualenvs/pysite
VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python
VIRTUALENVWRAPPER_HOOK_DIR=/Users/sbeam/.virtualenvs
VIRTUALENVWRAPPER_LOG_DIR=/Users/sbeam/.virtualenvs

(pysite)sbeam@pris ~/Sites]$ python
Python 2.7.3 (v2.7.3:70274d53c1dd, Apr  9 2012, 20:52:43) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> from pprint import pprint as pp
>>> pp(sys.path)
['',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/distribute-0.6.27-py2.7.egg',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pip-0.7.2-py2.7.egg',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages']
>>> import markdown
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named markdown

【问题讨论】:

  • 当我想确保在我的 virtualenv 中使用 Python 版本而不是摆弄PATH 时,我发现通过--python 标志将路径传递给python 可执行文件更有用: virtualenv --python=/usr/local^Cin/python2.7 myenv你试过了吗?我在 Mac OS 中有很多使用 Python 的 PITA,据我所知,这是唯一可靠的解决方案。
  • 我在创建新的 virtualenv 时尝试了该标志,但没有任何区别
  • 愚蠢的问题,但是您是否使用 Python 2.7 安装了 pip?
  • 可以添加which pip的输出吗?

标签: python virtualenv pip


【解决方案1】:

请注意,根据设计和请求,virtualenv 的新版本 (1.7+) 默认情况下不包括系统中的 site-packages

http://www.virtualenv.org/en/latest/news.html

您可以在 virtualenv 创建时显式使用--system-site-packages,请参阅:

http://www.virtualenv.org/en/latest/index.html#the-system-site-packages-option

或者您可以只获取 freeze 的输出,然后在 virtualenv 中执行 pip install -r requirements.txt

【讨论】:

  • 好的,但问题是 pip 安装的包(例如,markdown)不在sys.path 中,而不是找不到系统包。我尝试使用--system-site-packages 标志创建一个新的virtualenv,但它没有任何区别,因为我没有全局安装任何包。
  • 你的输出是否全部来自同一个 shell 会话(因此在虚拟环境中) - 如果你运行 /Users/sbeam/.virtualenvs/pysite/bin/python 并检查 sys.path 你会得到什么?
猜你喜欢
  • 2020-01-08
  • 2020-05-19
  • 2018-06-25
  • 1970-01-01
  • 1970-01-01
  • 2017-07-27
  • 1970-01-01
  • 1970-01-01
  • 2019-05-02
相关资源
最近更新 更多