Drp*_*ton 3 python pip conda pyproject.toml
我从事科学计算工作,我实际上被迫使用 conda 安装某些其他维护的软件包来完成我的工作。如果我想使用自己的包,我需要一种方法让它能够与 conda 依赖解算器和 pip 很好地配合。我想简单地使用conda install本地包并使用 conda 依赖项求解器,以便它与其他软件兼容。但是,我还希望能够以其他方式pip install打包和/或将其上传到 PYPI。
有没有办法开发与 conda 环境兼容的标准化 python 包(使用例如pyproject.toml和/或文件)?requirements.txt我已经搜索过,但没有找到关于如何做到这一点的明确处方。
对于 conda,还可以 在本地*.yml文件中指定所需的依赖项,但此选项与通过 pip 安装不兼容。人们必须同时维护文件*.yml和requirements.txt文件中的依赖关系。这种重复导致手动维护并且容易出错。
请注意,condadevelop命令是由anaconda官方支持的,从表面上看它可以用来解决这个问题;然而,它 实际上已被弃用,并且在撰写本文时,Python 3.11 似乎不支持它。
我拼凑出了一种*.yml完全放弃文件的方法。我将所有依赖项保存在一个requirements.txt文件中(以及所有开发要求 requirements-dev.txt)并使用 conda (或者更好的是mamba)来安装它们。最后,我使用 pip 来安装软件包本身。
以下是该项目的文件结构示例(受到这篇文章的启发):
Project/
|-- src/
| |-- __init__.py
| |-- main.py
|
|-- pyproject.toml
|-- requirements.txt
|-- requirements-dev.txt
Run Code Online (Sandbox Code Playgroud)
在 中的其他元数据中pyproject.toml,我们必须指定我们想要从 中动态读取需求requirements.txt,以及我们可能需要的任何其他可选依赖项(例如,requirements-dev.txt):
pyproject.toml
[project]
name = "myproject"
...
dynamic = ["dependencies", "optional-dependencies"]
[tool.setuptools.dynamic]
dependencies = { file = ["requirements.txt"] }
[tool.setuptools.dynamic.optional-dependencies]
dev = { file = ["requirements-dev.txt"] }
Run Code Online (Sandbox Code Playgroud)
使用 pip 安装
当前结构与 pip 完美配合,包括可编辑的安装和/或可选的依赖项:
# local installation of the package:
pip install .
# editable install:
pip install -e .
# editable install with optional dependencies:
pip install -e `.[dev]`
Run Code Online (Sandbox Code Playgroud)
使用 conda 安装
使用 conda 时事情并不那么简单。从头开始创建环境时:
conda create -n ENVNAME "python>=3.11" --file requirements.txt
Run Code Online (Sandbox Code Playgroud)
如果添加到已建立的环境,请使用update:
conda update --name ENVNAME --file requirements.txt
Run Code Online (Sandbox Code Playgroud)
如果安装第二组依赖项(例如,存储在 中的开发依赖项requirements-dev.txt),您可能不希望它们影响原始依赖项(例如,您将测试稍微不同的包)。您可以使用以下方法冻结它们freeze-installed:
conda update --name ENVNAME --freeze-installed --file requirements-dev.txt
Run Code Online (Sandbox Code Playgroud)
最后,通过 conda 处理所有依赖项,可以使用 将该包安装到环境中pip。
pip install --no-build-isolation --no-deps .
Run Code Online (Sandbox Code Playgroud)
--no-deps和标志对于防止 pip 干扰 conda 维护的环境是必要的--build-isolation。
| 归档时间: |
|
| 查看次数: |
2092 次 |
| 最近记录: |