代码之家  ›  专栏  ›  技术社区  ›  Bananach

对于虚拟环境和多个Python版本,我只需要学习“venv”[duplicate]

  •  0
  • Bananach  · 技术社区  · 6 年前

    python3.3在其标准库中包含了新的包 venv (py)?(v|virtual|pip)?env ?

    0 回复  |  直到 8 年前
        1
  •  1549
  •   Flimm D. Ben Knoble    5 年前

    不在标准库中的PyPI包:

    • virtualenv

      它的工作原理是在一个目录中安装一堆文件(例如: env/ PATH 环境变量,以自定义 bin env/bin/ python python3 pip .

    • pyenv 用于隔离Python版本。例如,您可能希望针对python2.7、3.6、3.7和3.8测试代码,因此需要一种在它们之间切换的方法。一旦激活,它的前缀是 路径 ~/.pyenv/shims , ). 这些不是Python附带的命令的副本;它们是根据 PYENV_VERSION 环境变量,或 .python-version 文件,或 ~/.pyenv/version 文件。 pyenv install .

    • pyenv-virtualenv 是的插件 皮恩夫 作者与 皮恩夫 皮恩夫 同时方便。但是,如果您使用的是python3.3或更高版本, pyenv virtualenv公司 会尝试运行 python -m venv 如果有,而不是 虚拟人 虚拟人 皮恩夫 pyenv virtualenv公司 ,如果您不想使用便利功能。

    • virtualenvwrapper 是对的一组扩展 虚拟人 docs ). 它给你的命令是 mkvirtualenv , lssitepackages workon 在不同的 虚拟人 虚拟人 目录。

    • pyenv-virtualenvwrapper 皮恩夫 皮恩夫 ,方便集成 进入之内 皮耶夫

    • pipenv 旨在结合 Pipfile , 虚拟人 到命令行上的一个命令中。这个 虚拟人 目录通常放置在 ~/.local/share/virtualenvs/XXX ,与 XXX 是项目目录路径的哈希。这与 ,其中目录通常位于当前工作目录中。 pipenv公司 用于开发Python应用程序(而不是库)。除了 ,例如 poetry

    标准库:

    • pyvenv 是python3附带的脚本,但是 deprecated in Python 3.6 python3 -m venv .

    • venv 是python3附带的一个包,您可以使用 蟒蛇 (尽管出于某些原因,有些发行版将它分离成一个单独的发行包,比如 python3-venv 在Ubuntu/Debian上)。它的作用与 虚拟人 ,但只有其功能的一个子集( see a comparison here ). 继续比 凡夫 ,尤其是前者同时支持python2和python3。

    这是我对初学者的个人建议:从学习开始 virtualenv pip ,在各种情况下,使用python2和3的工具,一旦开始需要它们,就可以使用其他工具。

        2
  •  331
  •   Rian Rizvi    4 年前

    我只想避免使用 virtualenv 在Python3.3+之后,使用标准附带的库 venv

    $ python3 -m venv <MYVENV>  
    

    虚拟 otool

    $ otool -L bin/python
    python:
        @executable_path/../Python (compatibility version 3.4.0, current version 3.4.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.0.0)
    

    因此我会避免 virtualenvwrapper pipenv . pyvenv pyenv 虚拟人 但我也会远离它,因为我认为 凡夫 也能做什么 皮恩夫

    凡夫 在shell中创建虚拟环境 新鲜的 沙盒 ,它是 . 新鲜的 因为所有的python库都要重新安装,因为所有的python库都要重新安装 pip install 当虚拟环境处于活动状态时。 沙盒 因为这些新的库安装在虚拟环境之外都不可见,所以您可以删除整个环境并重新启动,而不必担心影响基本的python安装。 用户可安装库 因为虚拟环境的目标文件夹创建时没有 sudo 苏多 在其中安装库的权限。最后是 多python保险箱 ,因为当虚拟环境激活时,shell只看到用于构建该虚拟环境的python版本(3.4、3.5等)。

    皮恩夫 类似于 因为它允许您管理多个python环境。但是 皮恩夫 您无法方便地将库安装回滚到某个启动状态,您可能需要 admin 凡夫 .

    虚拟人 凡夫

    编辑:BDFL微博,

    我使用venv(在stdlib中)和一堆shell别名来快速切换 October 22, 2020
        3
  •  53
  •   F1Linux    5 年前

    更新20200825:

    添加到下面“ 结论 “段落

    我去了 pipenv 兔子洞( 因为最后一个答案是两年前

    免责声明:

    答案是 关于继续关于 pipenv公司 凡夫 作为信封解决方案- . 是关于 皮帕 虚拟人 要么/或 在他们之间做出选择。我把重点放在这两个工具上,正是因为它们是由 皮帕

    凡夫

    正如OP所说, 凡夫 不是 赞同 创造 虚拟信封 : " Changed in version 3.5: The use of venv is now recommended for creating virtual environments

    pipenv公司

    pipenv公司 -像 静脉 vulnerability checking requirements.txt , Pipfile PyPA endorses pipenv for PACKAGE MANAGEMENT ,这似乎意味着 pipfile 是取代 .

    然而 : 虚拟人 作为创建虚拟信封的工具, 静脉 签署人 作为创建虚拟信封的转到工具。

    冲突标准:

    认可使用不同虚拟信封解决方案的两种不同工具。关于Github的激烈争论 图瓦文诺夫 here .

    冲突解决:

    虚拟人 在里面 future releases :

    使用它的环境(然后对其执行后续操作) 为便于我们提供其他担保)

    结论:

    因此,看起来这两个竞争对手的虚拟信封解决方案之间未来会有一些融合,但从现在开始 pipenv公司 virtualenv -在很大程度上不同于 venv .

    鉴于 the problems pipenv solves 事实上 皮帕 已经给予了它的祝福,它 出现 有一个光明的未来。如果 虚拟人 pipenv公司 凡夫

    更新20200825 :

    管道 再次被积极开发。事实上,从那时起,大规模和实质性的更新 released .

        4
  •  6
  •   Arnuld    4 年前

    包装像Python网站 is dead . 多亏了 flimm 因为你指出了这一点。Pipenv现在已经在PyPI发布了最新版本,截止到2020年8月。不过,官方的立场已经改变。现在 official docs recommended 凡夫

    我在找同样的东西 this post . 我认为这个关于使用什么工具的问题对于像我这样的新Python用户来说是相当混乱和困难的。这是直接从PyPA关于pipenv的网站:

    主要针对Python应用程序开发的需要而不是 通过几个过程和维护问题来防止bug 修复和新功能发布(整个2019年 无需新版本即可通过)。这意味着在近期内,

    尽管情况仍然如此,项目维护人员可能希望研究其他用于应用程序依赖性管理的工具 使用pipenv,或与pipenv一起使用。

    发布之后也仍然在轨道上,那么这个警告就 教程将被删除。如果这些释放没有保持在正轨上, 然后教程本身将被删除,并替换为 有关可用依赖项管理选项的讨论页。

        5
  •  2
  •   mirek    4 年前
    • 皮恩夫 -管理不同的python版本,
    • 所有其他 -创建虚拟环境(它隔离了python

    pipenv公司 想把所有的结合起来,除了以前它安装的“需求”(进入活动的虚拟环境或创建自己的 如果没有激活)

    所以也许你只对pipenv满意。

    在Debian中:

    1. apt install libffi-dev python3-virtualenv

    2. 安装pyenv基于 https://www.tecmint.com/pyenv-install-and-manage-multiple-python-versions-in-linux/

    3. …而不是pyenv virtualenv安装pyenv virtualenvwrapper:

      git克隆 https://github.com/pyenv/pyenv-virtualenvwrapper.git $(pyenv root)/插件/pyenv virtualenvwrapper

      pyenv virtualenvwrapper

    然后为项目创建虚拟环境(workingdir必须存在):

    mkvirtualenv <venvname> -p python3.9 -a <workingdir>
    

    workon <venvname>
    

    在一个项目里我有这个文件要求.txt,而不修复内部版本(如果不需要某些版本限制)。 有两种可能的工具可以将它们安装到当前的虚拟环境中: pip工具 管道

    pipenv install -r requirements.txt
    

    这将创建Pipfile和Pipfile.lock文件文件,固定版本在第二个。如果你想重新安装完全相同的版本(Pipfile.lock文件必须出席):

    pipenv install
    

    记住这一点Pipfile.lock文件与某些Python版本相关,如果使用其他版本,则需要重新创建。

    所以你可以看到我用pipenv很差。如果你用得好,它可以取代一切?