我尝试在项目目录中导入通过pip安装的模块时遇到virtualenv的问题(虚拟环境目录中的一个)。
我的项目结构是;
\Project
..\dev (virtual env)
..test.py
我已经在我的虚拟环境上下文中使用pip安装了 cement ,但是当我尝试包含它时,我会遇到导入错误。
从我的项目文件夹的根目录开始;
Project$ source dev/bin/activate
(dev) Project$ pip list
cement (2.10.2)
pip (9.0.1)
setuptools (36.6.0)
wheel (0.30.0)
一切看起来都不错。
(dev) Project$ python
Python 2.7.10 (default, Feb 7 2017, 00:08:15)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from cement.core.foundation import CementApp
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "cement.py", line 1, in <module>
from cement.core.foundation import CementApp
ImportError: No module named core.foundation
>>> quit()
所以我进入虚拟环境目录;
(dev) Project$ cd dev/
(dev) dev$ python
Python 2.7.10 (default, Feb 7 2017, 00:08:15)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from cement.core.foundation import CementApp
>>>
导入在virtualenv目录中运行良好。
这是正确的行为吗?我是否需要将我的src文件存储在virtualenv目录中?因为我的印象是我的应用程序可以存在于virtualenv目录之外但是在virtualenv中访问已安装的模块一次是活动的吗?
答案 0 :(得分:2)
这是正确的行为吗?
不,这不是正确的行为。激活virtualenv之后,您应该可以从任何目录运行python
,甚至可以在项目之外运行,from cement.core.foundation import CementApp
应该可以运行。
我是否需要将我的src文件存储在virtualenv目录中?
不,你绝对不能将你的源文件移到virtualenv目录中。
由于我的印象是我的应用程序可以存在于virtualenv目录之外但是在virtualenv中访问已安装的模块一次是活动的吗?
这是正确的,它应该工作。
我能想到的唯一可以阻止它工作的是你的virtualenv目录(dev
)以某种方式被破坏/损坏。我建议重新创建它,这应该很容易。
答案 1 :(得分:-1)
这是正确的行为。您在虚拟环境中安装与项目相关的软件包,以便它不会与您为计算机安装的原始python-pip中的软件包混淆。版本不匹配有时是一个严重的问题,并且防止我们使用虚拟环境。