Захватить снимок текущей среды Python и воссоздать на другом компьютере - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть среда, созданная с использованием miniconda с python 3.6.8, которая называется basepy_3_6_8.

Я хочу сохранить снимок среды в файл, а затем заново создать его на другом компьютере:

Существуют разные команды для захвата снимка среды с немного отличающимися выходными данными.Какие из них можно использовать, чтобы гарантировать, что точная среда, используемая пользователем, воссоздается в цели?

Я надеялся, что pip freeze > requirements.txt и pip install -r requirements.txt будут работать независимо от исходной среды, но я заметил, чтоpip freeze изнутри среды conda не фиксирует версию 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, virtualenv, venv, глобальная среда Python), чтобы его можно было равномерно установить на другой машине.Каков наилучший подход для этого?

1 Ответ

0 голосов
/ 05 февраля 2019

Я никогда не использовал conda, но я бы попытался использовать два разных инструмента для управления версией Python и зависимостями вашего проекта.

Чтобы установить конкретную версию Python, я бы использовал pyenv: https://github.com/pyenv/pyenv.

pyenv также имеет плагин для управления virtualenvs (https://github.com/pyenv/pyenv-virtualenv), который должен поддерживать Anaconda и Miniconda: https://github.com/pyenv/pyenv-virtualenv#anaconda-and-miniconda

Для управления вашими зависимостями (пакеты, которые вы устанавливаете в своем виртуальномenv), у вас есть несколько альтернатив:

  • Замораживание в пипсах: оно автоматически не гарантирует воспроизводимость, потому что у него нет файла блокировки для точного определения дерева зависимостей

  • Поэзия: https://github.com/sdispater/poetry (поддерживает файл блокировки)

  • Pipenv: https://github.com/pypa/pipenv (поддерживает файл блокировки)

Надеюсь, это полезно.

...