为python项目自动切换具有不同依赖关系的环境
我正在处理使用同一库的不同版本的不同python项目。当我使用pip安装库时,它们是全局安装的,并且是单一版本。据我所知,拥有同一个库的不同版本的唯一方法是为每个项目创建一个conda环境。然而,当我同时处理许多项目时,总是在环境之间切换会变得有点烦人为python项目自动切换具有不同依赖关系的环境,python,npm,pip,Python,Npm,Pip,我正在处理使用同一库的不同版本的不同python项目。当我使用pip安装库时,它们是全局安装的,并且是单一版本。据我所知,拥有同一个库的不同版本的唯一方法是为每个项目创建一个conda环境。然而,当我同时处理许多项目时,总是在环境之间切换会变得有点烦人 我习惯了npm,每个节点项目都有自己的node\u modules目录,基本上创建了一个虚拟环境,而不必显式地创建和切换环境。有没有一种方法可以获得类似于python中npm的工作流?为每个项目显式创建conda环境是python中的最佳选项吗?
我习惯了npm,每个节点项目都有自己的
node\u modules
目录,基本上创建了一个虚拟环境,而不必显式地创建和切换环境。有没有一种方法可以获得类似于python中npm的工作流?为每个项目显式创建conda环境是python中的最佳选项吗?如果有,是否有任何通用工具或脚本来改进此工作流?(例如,python是否有与package.json
或npm install
相当的版本?事实上,python的版本几乎完全相同:
Pipenv是一个包装器。
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
具有相同的效果。
使用pip时,requirements.txt
文件是标准文件;Pipenv希望有一个符合此格式的。
例如,以下是有效的最小requirements.txt
:
docopt
它只是意味着您需要任何版本的docopt
。
如果您需要依赖项的特定版本。
使用-r
标志将其传递给pipenv安装
:
~/project$pipenv安装-r requirements.txt
要求文件提供!正在导入文件…
Pipfile.lock(c2e94e)已过期,正在更新为(5a67c1)…
正在锁定[开发包]依赖项…
正在锁定[程序包]依赖项…
更新了Pipfile.lock(c2e94e)!
正在从Pipfile.lock(c2e94e)安装依赖项…