捕获当前python环境的快照并在另一台计算机上重新创建

捕获当前python环境的快照并在另一台计算机上重新创建,python,pip,virtualenv,conda,python-venv,Python,Pip,Virtualenv,Conda,Python Venv,我有一个使用miniconda和python 3.6.8创建的环境,称为basepy_3_6_8 我想将环境快照保存到文件中,然后稍后在另一台计算机上重新创建: 有不同的命令用于捕获环境快照,但输出略有不同。我可以使用以下哪项来保证在目标中重新创建用户使用的确切环境 我希望pip-freeze>requirements.txt和pip-install-r requirements.txt能够独立于源环境工作,但我注意到conda环境中的pip-freeze并不能捕获python版本 以下是创建c

我有一个使用miniconda和python 3.6.8创建的环境,称为basepy_3_6_8

我想将环境快照保存到文件中,然后稍后在另一台计算机上重新创建:

有不同的命令用于捕获环境快照,但输出略有不同。我可以使用以下哪项来保证在目标中重新创建用户使用的确切环境

我希望
pip-freeze>requirements.txt
pip-install-r requirements.txt
能够独立于源环境工作,但我注意到conda环境中的pip-freeze并不能捕获python版本

以下是创建conda环境的代码,以及不同命令的输出:

$ conda create -n myenv python=3.6.8
$ conda activate myenv

(myenv)$ pip freeze
astroid==2.1.0
autopep8==1.4.3
certifi==2018.11.29
colorama==0.4.1
isort==4.3.4
lazy-object-proxy==1.3.1
mccabe==0.6.1
pycodestyle==2.4.0
pylint==2.2.2
six==1.12.0
typed-ast==1.1.1
wincertstore==0.2
wrapt==1.11.0

(myenv)$ pip list
Package           Version
----------------- ----------
astroid           2.1.0
autopep8          1.4.3
certifi           2018.11.29
colorama          0.4.1
isort             4.3.4
lazy-object-proxy 1.3.1
mccabe            0.6.1
pip               18.1
pycodestyle       2.4.0
pylint            2.2.2
setuptools        40.6.3
six               1.12.0
typed-ast         1.1.1
wheel             0.32.3
wincertstore      0.2
wrapt             1.11.0

(myenv)$ conda list
# packages in environment at C:\Users\alias\AppData\Local\Continuum\miniconda3\envs\myenv:
#
# Name                    Version                   Build  Channel
certifi                   2018.11.29               py36_0
pip                       18.1                     py36_0
python                    3.6.8                h9f7ef89_0
setuptools                40.6.3                   py36_0
sqlite                    3.26.0               he774522_0
vc                        14.1                 h0510ff6_4
vs2015_runtime            14.15.26706          h3a45250_0
wheel                     0.32.3                   py36_0
wincertstore              0.2              py36h7fe50ca_0

(myenv)$ conda list --export
# This file may be used to create an environment using:
# $ conda create --name <env> --file <this file>
# platform: win-64
certifi=2018.11.29=py36_0
pip=18.1=py36_0
python=3.6.8=h9f7ef89_0
setuptools=40.6.3=py36_0
sqlite=3.26.0=he774522_0
vc=14.1=h0510ff6_4
vs2015_runtime=14.15.26706=h3a45250_0
wheel=0.32.3=py36_0
wincertstore=0.2=py36h7fe50ca_0
$conda create-n myenv python=3.6.8
$conda激活myenv
(myenv)冻结$pip
星体==2.1.0
autopep8==1.4.3
certifi==2018.11.29
colorama==0.4.1
isort==4.3.4
惰性对象代理==1.3.1
mccabe==0.6.1
pycodestyle==2.4.0
pylint==2.2.2
六=1.12.0
类型化ast==1.1.1
wincertstore==0.2
wrapt==1.11.0
(myenv)$pip列表
软件包版本
----------------- ----------
星象2.1.0
自动EP8 1.4.3
certifi 2018.11.29
colorama 0.4.1
isort 4.3.4
惰性对象代理1.3.1
mccabe 0.6.1
pip 18.1
pycodestyle 2.4.0
pylint 2.2.2
设置工具40.6.3
六个1.12.0
类型化AST1.1.1
车轮0.32.3
wincertstore 0.2
wrapt 1.11.0
(myenv)$conda列表
#位于C:\Users\alias\AppData\Local\Continuum\miniconda3\envs\myenv的环境中的包:
#
#名称版本生成通道
certifi 2018.11.29 py36_0
pip 18.1 py36_0
python 3.6.8 h9f7ef89_0
setuptools 40.6.3 py36_0
sqlite 3.26.0 he774522_0
vc 14.1 h0510ff6_4
vs2015_运行时14.15.26706 h3a45250_0
车轮0.32.3 py36_0
wincertstore 0.2 py36h7fe50ca_0
(myenv)$conda列表——出口
#此文件可用于创建环境,使用:
#$conda create--name--file
#平台:win-64
certifi=2018.11.29=py36_0
pip=18.1=py36_0
python=3.6.8=h9f7ef89_0
setuptools=40.6.3=py36_0
sqlite=3.26.0=he774522_0
vc=14.1=h0510ff6_4
vs2015_运行时=14.15.26706=h3a45250_0
车轮=0.32.3=py36_0
wincertstore=0.2=py36h7fe50ca_0

我最终对一个通用工具感兴趣,它可以捕获指定类型的当前环境(conda、virtualenv、venv、globalpython环境),以便在另一台机器上统一安装它。最好的方法是什么?

我从未使用过conda,但我会尝试使用两种不同的工具来管理python版本和项目依赖关系

要安装特定的python版本,我将使用pyenv:

pyenv还有一个管理virtualenvs()的插件,该插件应支持Anaconda和Miniconda:

要管理依赖项(您在虚拟环境中安装的软件包),您有几个备选方案:

  • Pip冻结:但它不能自动保证再现性,因为它没有锁定文件来精确定位确切的依赖关系树

  • 诗歌:(支持锁定文件)

  • Pipenv:(支持锁定文件)


希望这有帮助。

谢谢,Fabio-我的目标是确保捕获原始环境,而不更改它-因此,任何第三方软件包都不能位于当前环境中,因为它们(通常)可以修改原始环境中的软件包依赖项。