代码之家  ›  专栏  ›  技术社区  ›  Mei Zhang

自动在具有不同依赖关系的环境之间切换python项目

  •  3
  • Mei Zhang  · 技术社区  · 7 年前

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

    我习惯于NPM,每个节点项目都有自己的NPM。 node_modules 目录,它基本上创建了一个虚拟环境,而无需显式创建和切换环境。有没有一种方法可以得到类似于python中NPM的工作流?显式地为每个项目创建一个Conda环境是Python中的最佳选择吗?如果有,是否有任何通用工具或脚本来改进此工作流?(例如,是否存在 package.json npm install 对于Python?)

    1 回复  |  直到 7 年前
        1
  •  3
  •   Right leg A.s. Bhullar    7 年前

    实际上,对于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.lock . 您应该始终从 pipenv 命令,而不是手动编辑这些文件。

    另外,您可以通过pipenv安装 requirements.txt 文件,其效果与 匹普 . 这个 要求.txt 使用pip时,文件是标准的;pipenv需要符合此格式的文件。 例如,以下是有效的最小值 要求.txt :

    docopt
    

    它只是意味着你想要 docopt 在任何版本中。 如果您的依赖关系需要特定的版本, pip supports this as well . 你把它传递给 皮彭装置 -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/