【问题标题】:Installation of python modules when using a virtual environment使用虚拟环境时安装python模块
【发布时间】:2018-07-03 12:42:54
【问题描述】:

几个月前,我开始使用 Python 进行开发。我正在使用虚拟环境,因为在我遵循的使用 Python 绑定安装 OpenCV 的教程中强烈建议这样做。我想知道安装新模块(在 Ubuntu 上)的最佳做法是什么。虚拟环境的名称是cv。从命令行安装时,我应该在虚拟环境中吗? IE。我应该输入

pip3 install modulename

workon cv
pip3 install modulename

或两者兼而有之?它应该有所作为吗?

【问题讨论】:

  • 它有所不同,因为这就是 virtualenvs 的用途:分离工作环境并只安装到它们:所以最好使用第二种方法,否则它将被全局安装(并且可能在env,我不太喜欢它)..
  • 作为@NicoAlbers 所说的一个例外,如果您在所有项目中都使用某个包,您不妨全局安装它并使用--system-site-packages 启动您的虚拟环境。这对于您可能在自己的系统上构建的常用和大型软件包(如 numpy、scipy 或 cython)特别有用。
  • 另一个有用的提示,使用pip freeze,您可以构建您的 requirements.txt,您可以轻松选择要安装的软件包和版本,将它们安装到您的 venv 轻松将 requirements.txt 移动到你的venv并使用pip install -r requirements.txt,确保你进入你的venv可以通过使用which python来完成更多信息here
  • 所有有用的cmets;有人应该将它们包括在答案中。
  • @ArneRecknagel 那么默认情况下,任何全局安装的包都不会在虚拟环境中可用?我必须将--system-site-packages 条目放在哪里?谢谢大家.. 使用 PyDev 时,整个事情肯定会变得更加混乱

标签: python virtualenv


【解决方案1】:

virtualenv 是做什么的?

virtualenv 将本地 python 解释器复制到一个文件夹中,一旦激活,就会将其位置添加到您的 PATH 前面——这意味着坐在那里的 python 可执行文件将用于运行 python 代码。本质上就是这样。

如何激活它/检查它是否处于活动状态?

使用例如virtualenv venv 创建一个virtualenv 后,您可以使用source ./venv/bin/activate 激活它 - 完成。

如果您不确定 venv 是否处于活动状态,通常只需查看命令行即可,其中包含其名称,如下所示:(venv) user@workstation:~$ 。或者,您可以运行 python -c "import sys; print(sys.executable)",然后打印 venv 的位置而不是 /usr/bin/python,或任何系统默认值。

由于很多人使用 PyCharm,请关注 these instructions 在您的 IDE 中使用 venv。它简单方便,所以如果你使用 PyCharm,我建议你用它来处理你的 venvs。

我为什么要这些?

将开发环境相互隔离可以让您很多头疼。也许你想尝试最新的 python 开发版本而不在你宝贵的系统上释放它,也许你需要不同版本的 python 包用于不同的项目。在源代码更改时保持执行环境静态通常是一个非常好的主意。

如何将软件包安装到虚拟环境中?

默认情况下,安装包所需的工具setuptoolspipwheel已经打包到新创建的venv中,您只需使用pip install package_name安装包即可。请注意不要使用 sudo,因为这会将执行用户更改为 root 并绕过 venv-activation。

一些用例

  • virtualenv -p pyhton3.7 venv -- 我想使用与我的默认解释器不同的 python 解释器,例如python3.7Needs an installation of said python interpreter on the system!
  • virtualenv --system-site-packages venv -- 我想使用已经安装在 venv 中的 python 解释器的所有包。如果您经常使用像 numpy 这样的大包,这很有用。
  • virtualenv venv && source ./venv/bin/activate && pip install -r requirements.txt -- 从 github 克隆一个项目(并将 cding 到其中)后,为其设置一个独立的 Python 环境。

【讨论】:

  • 不错!我认为,如果您包含有关如何无法访问未安装到虚拟环境中的软件包的信息,那就太好了,除非按照您在对我的问题的评论中提到的方式进行了调整
【解决方案2】:

在第一种情况下,软件包将安装在系统的 Python(3) 目录中。第二个它们将安装在您的 virtualenv 中。取决于你想要什么结果...

【讨论】:

    【解决方案3】:

    是的,您需要在您希望安装软件包的虚拟环境中。每个新环境都与其他环境分开,进而与您的全局 python 环境分开。这是虚拟环境的好处,因为您不会让包与您在处理另一个项目时可能需要的其他包发生冲突。

    【讨论】:

    • 那么在虚拟环境中工作时,全局python环境中安装的任何包都无法访问?还是总是这样?这就是我不清楚的地方
    • 通常不,您可以让您的环境访问全局安装的软件包
    猜你喜欢
    • 2016-11-11
    • 2018-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-14
    • 1970-01-01
    • 2016-07-04
    相关资源
    最近更新 更多