VirtualEnv python导入无法从项目文件夹,只有virtualenv文件夹

时间:2017-10-29 11:49:35

标签: python virtualenv

我尝试在项目目录中导入通过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中访问已安装的模块一次是活动的吗?

2 个答案:

答案 0 :(得分:2)

  

这是正确的行为吗?

不,这不是正确的行为。激活virtualenv之后,您应该可以从任何目录运行python,甚至可以在项目之外运行,from cement.core.foundation import CementApp应该可以运行。

  

我是否需要将我的src文件存储在virtualenv目录中?

不,你绝对不能将你的源文件移到virtualenv目录中。

  

由于我的印象是我的应用程序可以存在于virtualenv目录之外但是在virtualenv中访问已安装的模块一次是活动的吗?

这是正确的,它应该工作。

我能想到的唯一可以阻止它工作的是你的virtualenv目录(dev)以某种方式被破坏/损坏。我建议重新创建它,这应该很容易。

答案 1 :(得分:-1)

这是正确的行为。您在虚拟环境中安装与项目相关的软件包,以便它不会与您为计算机安装的原始python-pip中的软件包混淆。版本不匹配有时是一个严重的问题,并且防止我们使用虚拟环境。