考虑将具有依赖项的Python子模块导入具有自己的依赖项的项目的情况。假设子模块有environment.yml
文件,项目本身有environment.yml
文件。
是否有办法创建包含这两种环境规范的环境,如果是这样,您将如何进行此操作? (或者有更好/更优选的方法来处理这种情况吗?)
答案 0 :(得分:2)
我猜你是开发子模块和项目的人,因为依赖关系仍然在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
这不太理想,因为基本的期望是导入的库带有自己的依赖项。
仅当可以通过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是您的最佳选择。
假设子模块没有conda依赖关系,那么从子模块中创建一个单独的包是理想的。创建setup.py
并将所有依赖项放入install_requires
字段。这是setup.py文件应该如何显示的模板。
包装好后,您可以执行以下操作:
pip install .
pip install git+https://github.com/username/submodule.git --upgrade
requirements.txt
下的environment.yml
或pip
:
git+https://github.com/username/submodule.git#egg=submodule