Совместное использование сред conda более Git: каковы лучшие практики? - PullRequest
1 голос
/ 27 мая 2020

Когда несколько человек работают над проектом Python с Git, как лучше всего гарантировать, что в локальных средах Conda установлены идентичные наборы пакетов?

Пока что я использую

conda env export > conda_env.yml

для записи среды и

conda env update --file conda_env.yml  --prune

для синхронизации среды.

Чтобы убедиться, что локальная среда соответствует содержимому conda_env.yml, у меня есть следующий тест:

def test_conda_environment():
    """Compares output of ``conda env export`` with the contents of ``conda_env.yml``. """

    # execute 'conda env export' and parse yaml output:
    cmd_result = run(['conda', 'env', 'export'], capture_output=True)
    d0 = yaml.safe_load(cmd_result.stdout.decode('utf-8'))

    # read saved conda environment from yaml file:
    fn = Path('..') / 'conda_env.yml'
    with open(fn, 'rt') as fp:
        d1 = yaml.safe_load(fp)

    # Compare the two dictionaries:
    if d0['channels'] != d1['channels']:
        print(f"Conda channels differ (current vs '{fn}'): " +
              f"{d0['channels']} vs {d0['channels']}")

    s0, s1 = sorted(d0['dependencies']), sorted(d1['dependencies'])
    if s0 != s1:
        df = difflib.Differ()
        ds = df.compare(s0, s1)
        ts = f"Differences of current environment (+) and file '{fn}' (-):"
        print("\n" + ts)
        print('=' * len(ts))
        print('\n'.join(l_ for l_ in ds if not l_.startswith(' ')))
        assert False  # fail test

Есть ли более простой способ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...