Conda将一个environment.yml导入另一个

时间:2018-01-08 21:12:58

标签: python git-submodules conda

考虑将具有依赖项的Python子模块导入具有自己的依赖项的项目的情况。假设子模块有environment.yml文件,项目本身有environment.yml文件。

是否有办法创建包含这两种环境规范的环境,如果是这样,您将如何进行此操作? (或者有更好/更优选的方法来处理这种情况吗?)

1 个答案:

答案 0 :(得分:2)

我猜你是开发子模块和项目的人,因为依赖关系仍然在environment.yml文件中。

选项1:使用子模块的environment.yml

更新项目环境

如果您的子模块依赖conda个软件包,那么很遗憾,这可能是您唯一的选择。

# First create the project environment
$ conda env create --force -f project_environment.yml

# Then update with submodule dependencies
$ conda env update -n project-env-name --file submodule_environment.yml

这不太理想,因为基本的期望是导入的库带有自己的依赖项。

选项2:将依赖项放入各自的requirements.txt文件

仅当可以通过pip从PyPi安装子模块依赖项时,这才适用。首先将项目和子模块的依赖项放入各自的requirements.txt文件中。

然后重新构建environment.yml文件以查看以下内容:

submodule_environment.yml

name: submodule-env-name
channels:
  - defaults
dependencies:
- python=3.6.3             # no conda dependencies
- pip:
    - -r requirements.txt  # <--- submodule dependencies

project_environment.yml

name: project-env-name
channels:
  - defaults
dependencies:
- python=3.6.3
- pip:
    - -r requirements.txt                    # <--- project dependencies
    - -r project/submodule/requirements.txt  # <--- submodule dependencies

通过这种方式,您可以完全忽略submodule_environment.yml文件,然后使用单个命令创建项目环境。

$ conda env create --force -f project_environment.yml

如果submodule依赖于conda个包,则此方法无效。如果是,则选项1是您的最佳选择。

选项3:打包子模块(理想)

假设子模块没有conda依赖关系,那么从子模块中创建一个单独的包是理想的。创建setup.py并将所有依赖项放入install_requires字段。这是setup.py文件应该如何显示的模板。

包装好后,您可以执行以下操作:

  • 使用以下方式在本地安装:
    • pip install .
  • 上传到github或bitbucket并使用以下命令安装:
    • pip install git+https://github.com/username/submodule.git --upgrade
  • 上传到github或bitbucket并将以下内容添加到requirements.txt下的environment.ymlpip
    • git+https://github.com/username/submodule.git#egg=submodule