【问题标题】:automate switching between environments with different dependencies for python projects在 python 项目的不同依赖项的环境之间自动切换
【发布时间】:2019-07-01 10:17:38
【问题描述】:

我正在开发使用同一库的不同版本的不同 python 项目。当我使用 pip 安装库时,它们是全局安装的,并且是单个版本。我知道拥有同一个库的不同版本的唯一方法是为每个项目创建一个 conda 环境。但是,当我同时处理多个项目时,总是在环境之间切换会有点烦人。

我习惯了 npm,每个节点项目都有自己的 node_modules 目录,它本质上创建了一个虚拟环境,而无需显式创建和切换环境。有没有办法在 python 中获得类似于 npm 的工作流程?为每个项目显式创建一个 conda 环境是 python 中的最佳选择吗?如果是这样,是否有任何常用工具或脚本来改进此工作流程? (例如,python 是否有 package.jsonnpm install 的等价物?)

【问题讨论】:

    标签: python npm pip


    【解决方案1】:

    实际上,Python 几乎完全相同:Pipenv

    Pipenv 是virtualenv 的包装器。 virtualenv 是 Python 的虚拟安装,安装了特定的依赖项,只有在需要时才能激活。

    你可以从 pip 安装 Pipenv:

    $ pip install --user pipenv
    

    要使用 Pipenv,您可以通过指定 Python 版本在现有目录中对其进行初始化:

    ~/project$ pipenv --python 3.5
    Creating a virtualenv for this project…
    Pipfile: ~/project/Pipfile
    Using /usr/local/bin/python3.5 (3.5.6) to create virtualenv…
    ⠴Running virtualenv with interpreter /usr/local/bin/python3.5
    Using base prefix '/usr/local'
    New python executable in ~/.local/share/virtualenvs/project-FR7x7nea/bin/python3.5
    Also creating executable in ~/.local/share/virtualenvs/project-FR7x7nea/bin/python
    Installing setuptools, pip, wheel...done.
    
    Virtualenv location: ~/.local/share/virtualenvs/project-FR7x7nea
    Creating a Pipfile for this project…
    

    这将创建一个名为Pipfile 的文件,它将保留您的依赖项。 它看起来像这样:

    [[source]]
    url = "https://pypi.org/simple"
    verify_ssl = true
    name = "pypi"
    
    [packages]
    
    [dev-packages]
    
    [requires]
    python_version = "3.5"
    

    您可以使用pipenv install 安装依赖项,就像使用pip 一样:

    pipenv install numpy
    

    这会将其添加到您的Pipfile,并将其版本冻结在Pipfile.lock。 您应该始终通过 pipenv 命令管理您的依赖项,而不是手动编辑这些文件。

    另外,你可以传递给 pipenv 安装一个requirements.txt 文件,它与pip 具有相同的效果。 requirements.txt 文件是使用 pip 时的标准文件; Pipenv 需要一个尊重这种格式的人。 例如,以下是有效的最小 requirements.txt

    docopt
    

    这只是意味着您想要任何版本的docopt。 如果您需要特定版本的依赖项,pip supports this as well。 你将它传递给 pipenv install 并带有 -r 标志:

    ~/project$ pipenv install -r requirements.txt
    Requirements file provided! Importing into Pipfile…
    Pipfile.lock (c2e94e) out of date, updating to (5a67c1)…
    Locking [dev-packages] dependencies…
    Locking [packages] dependencies…
    Updated Pipfile.lock (c2e94e)!
    Installing dependencies from Pipfile.lock (c2e94e)…
      ?   ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 2/2 — 00:00:02
    To activate this project's virtualenv, run pipenv shell.
    Alternatively, run a command inside the virtualenv with pipenv run.
    

    最后,您必须激活 Pipenv 封装的虚拟环境,才能有效访问依赖项。 这是通过pipenv shell 完成的(尽管您可以使用pipenv run <cmd> 执行单个命令):

    ~/project $ pipenv shell
    (project) ~/project$ python
    Python 3.5.6 (default, Dec  3 2018, 12:12:20) 
    [GCC 8.2.1 20180831] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import numpy
    >>>
    

    这样做的好处是,您可以从 Github 克隆一个随机 repo,初始化 Pipenv,然后运行 ​​pipenv install -r requirements.txt 以准备好运行项目的干净环境(这里需要注意的是,下载所有依赖项可能需要一段时间)。 依赖项只会安装在虚拟环境中,保持您的其他虚拟环境和主机环境干净。

    更多见解在这里:https://docs.python-guide.org/dev/virtualenvs/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-13
      • 1970-01-01
      • 1970-01-01
      • 2017-04-08
      • 1970-01-01
      相关资源
      最近更新 更多