【问题标题】:VirtualEnv python imports not working from project folder, only virtualenv folderVirtualEnv python导入不能从项目文件夹中工作,只有virtualenv文件夹
【发布时间】:2017-10-29 11:49:35
【问题描述】:

我在尝试导入通过 pip 在我的项目目录中安装的模块时遇到了 virtualenv 问题(从虚拟 env. 目录开始)。

我的项目结构是;

\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()

于是我 cd 进入虚拟环境目录;

(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 中处于活动状态就可以访问已安装的模块?

【问题讨论】:

  • 不,这不是正确的行为。激活 virtualenv 后,您应该能够从任何目录运行 python,甚至在您的项目之外,并且 from cement.core.foundation import CementApp 应该 工作。您绝对不能将源文件移动到 virtualenv 目录中。我想知道您的 virtualenv 目录是否可能以某种方式损坏。我建议重新创建它,这应该很容易。
  • 感谢您的见解@janos,我重新创建了虚拟环境并解决了问题,虚拟环境一定不是第一次正确创建。再次感谢!

标签: python virtualenv


【解决方案1】:

这是正确的行为吗?

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

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

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

我的印象是我的应用程序可以位于 virtualenv 目录之外,但一旦在 virtualenv 中处于活动状态就可以访问已安装的模块?

没错,它应该工作。

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 这是不正确的。我想你可能错过了这个问题的一些细节。 OP已经激活了virtualenv,pip list 甚至显示了可用的包,但是他不能在一个目录中导入它,但可以在另一个目录中导入。这不正常。另请参阅我对问题本身的评论。
    • 导入在虚拟环境中运行良好。但在虚拟环境之外它没有。我错过了什么?
    • 虚拟环境在他的两次处决中都处于活动状态。所以它应该可以工作,不管他的工作目录是什么。
    • @janos,这也是我的理解,谢谢确认
    猜你喜欢
    • 2017-02-19
    • 2016-11-18
    • 1970-01-01
    • 2017-01-05
    • 2013-05-23
    • 1970-01-01
    • 1970-01-01
    • 2011-10-03
    • 2012-12-09
    相关资源
    最近更新 更多