virtualenv Python存在导入错误,但iPython可以正常工作

2024-09-29 23:27:16 发布

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

我在macosx机器上使用virtualenv和virtualenvwrapper。我的项目布局是:

/Users/mrafayaleem/Projects/imagemonster/ (project dir)
    |---- imagemonster/
        |---- server.py
        |---- conf/
            |---- settings.py

我在以下行中收到导入错误服务器.py公司名称:

^{pr2}$

当我使用项目目录中的python imagemonster/server.py运行它时。 在ipyhton下运行它很好,我不明白为什么会发生这种情况。在

以下是系统路径对于两者:

Python:

/Users/mrafayaleem/.virtualenvs/imagemonster/lib/python27.zip
/Users/mrafayaleem/.virtualenvs/imagemonster/lib/python2.7
/Users/mrafayaleem/.virtualenvs/imagemonster/lib/python2.7/plat-darwin
/Users/mrafayaleem/.virtualenvs/imagemonster/lib/python2.7/plat-mac
/Users/mrafayaleem/.virtualenvs/imagemonster/lib/python2.7/plat-mac/lib-scriptpackages
/Users/mrafayaleem/.virtualenvs/imagemonster/Extras/lib/python
/Users/mrafayaleem/.virtualenvs/imagemonster/lib/python2.7/lib-tk
/Users/mrafayaleem/.virtualenvs/imagemonster/lib/python2.7/lib-old
/Users/mrafayaleem/.virtualenvs/imagemonster/lib/python2.7/lib-dynload
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages
/Users/mrafayaleem/.virtualenvs/imagemonster/lib/python2.7/site-packages

iPython:

/Users/mrafayaleem/.virtualenvs/imagemonster/bin
/Users/mrafayaleem/.virtualenvs/imagemonster/lib/python27.zip
/Users/mrafayaleem/.virtualenvs/imagemonster/lib/python2.7
/Users/mrafayaleem/.virtualenvs/imagemonster/lib/python2.7/plat-darwin
/Users/mrafayaleem/.virtualenvs/imagemonster/lib/python2.7/plat-mac
/Users/mrafayaleem/.virtualenvs/imagemonster/lib/python2.7/plat-mac/lib-scriptpackages
/Users/mrafayaleem/.virtualenvs/imagemonster/Extras/lib/python
/Users/mrafayaleem/.virtualenvs/imagemonster/lib/python2.7/lib-tk
/Users/mrafayaleem/.virtualenvs/imagemonster/lib/python2.7/lib-old
/Users/mrafayaleem/.virtualenvs/imagemonster/lib/python2.7/lib-dynload
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages
/Users/mrafayaleem/.virtualenvs/imagemonster/lib/python2.7/site-packages
/Users/mrafayaleem/.virtualenvs/imagemonster/lib/python2.7/site-packages/IPython/extensions
/Users/mrafayaleem/.ipython

有人能帮我解决这个奇怪的行为吗?在


Tags: pymacliblibraryframeworkvirtualenvsversionssystem
2条回答

这不是因为virtualenv。 这是因为python和IPython之间的差异。也可以从当前目录中的中搜索路径。在this SO thread中也有类似的答案。在

您应该cd进入imagemonster目录,不要workonvirtualenv,然后尝试:

python server.py

并处理引发的导入错误。在

来得有点晚,但这可能有助于其他人寻找解决方案。Ipython同时使用当前的系统路径和当前的项目目录,但是在virtualenv中运行时,将只使用安装期间指定的当前python路径。必须将当前工作目录附加到模块导入声明中:

我会这样做:

import sys
sys.path.append('/Users/mrafayaleem/Projects/imagemonster/conf')

from imagemonster.conf import settings

这里的解决方案给出了更精确的解决方案,尤其是在virtualenv https://stackoverflow.com/questions/19876993/python-module-import-relative-paths-issue中工作时

相关问题 更多 >

    热门问题