我正在使用相同库的不同版本的不同python项目中工作。当我使用pip安装库时,它们是全局安装的,并且是单个版本。我知道拥有同一个库的不同版本的唯一方法是为每个项目创建一个conda环境。但是,当我同时处理多个项目时,始终在环境之间切换会变得有些烦人。
我习惯了npm,其中每个节点项目都有自己的node_modules
目录,该目录本质上创建了一个虚拟环境,而无需显式创建和切换环境。有没有办法获得类似于python中npm的工作流程?明确为每个项目创建一个conda环境是python中的最佳选择吗?如果是这样,是否有任何通用工具或脚本来改进此工作流程? (例如,Python是否有package.json
或npm install
的等效项?)
答案 0 :(得分:3)
实际上,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
命令来管理依赖项,而不是手动编辑这些文件。
此外,您可以将requirements.txt
文件传递给pipenv,其作用与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克隆一个随机存储库,初始化Pipenv,然后运行pipenv install -r requirements.txt
以准备一个干净的环境来运行该项目(这里的警告是下载所有依赖项)可能需要一些时间)。
依赖项将仅安装在虚拟环境中,以保持其他虚拟环境和主机环境的清洁。