Fen*_*III 11 python packaging pip
我试图在开发我的 Python 应用程序时养成良好的习惯,并将它们组织起来,就好像它们将来会一直被其他人使用一样。其中一个关键部分是包装方面。
我已经阅读了一定数量的帖子、讨论和 pep 517/518。但是,我仍然不完全了解如何正确组织我的文件以进行打包。
我决定跟随setup.cfg路径而不是pyproject.toml路径。那件事很清楚。我将在setup.cfg.
我也在使用virtualenv并且我知道与开发相关的包 ( black, pytest,...) 应该在一个单独的文件中定义setup.cfg,通常一个名为requirements.txt. 有一点不清楚:应该setup.cfg是一个子集requirements.txt并因此重复一些信息?这似乎是不好的做法,并且在某些时候肯定会变得断开连接并且难以维护。
我试图找到这个问题的答案。我找到了这篇文章,但我不明白如何添加它
--index-url https://pypi.python.org/simple/
-e .
Run Code Online (Sandbox Code Playgroud)
在 requirements.txt 中有助于避免问题甚至处理开发依赖项。
当他提出以下可能性时,我更加迷茫了:
--index-url https://pypi.python.org/simple/
-e https://github.com/foo/bar.git#egg=bar
-e .
Run Code Online (Sandbox Code Playgroud)
这达到了什么目的?
最后,该setup.cfg方式是否与车轮包的构建兼容?
我通常遵循以下两种方法将包中的开发依赖项列表与运行时依赖项分开:
在我的setup.py配置文件中,我使用该extras_require字段来定义与开发相关的依赖项,如下所示:
setup.py
from setuptools import find_packages, setup
INSTALL_REQUIRES = ["python-dotenv"]
EXTRAS_REQUIRE = {
"dev": ["flake8", "black", "mypy"],
}
setup(
name="mypackage",
version="0.1.0",
description="My awesome package",
packages=find_packages(),
install_requires=INSTALL_REQUIRES,
extras_require=EXTRAS_REQUIRE,
python_requires=">=3.8",
)
Run Code Online (Sandbox Code Playgroud)
正如您在上面看到的,我有一本EXTRAS_REQUIRE带有键的字典dev,其中列出了我的开发依赖项。然后我就可以使用它pip来安装该包了。如果我想排除我刚刚执行的安装pip install .,这样只有必需的python-dotenv软件包mypackage才会安装在您给定的环境中。但是,如果您想包含与开发相关的依赖项,您可以像这样指定额外的安装pip install .['dev'],那么您的所有开发依赖项也将安装在环境中。
如果您坚持将开发需求放在单独的需求文件中,您也可以这样做,让我们requirements-dev.txt这样调用并填充它:
requirements-dev.txt
. # note the dot here, this will tell pip to include the install_requires deps from your setup.py
flake8
black
mypy
Run Code Online (Sandbox Code Playgroud)
setup.py并通过删除 extras 字典来修改之前的内容:
setup.py
. # note the dot here, this will tell pip to include the install_requires deps from your setup.py
flake8
black
mypy
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样安装你的包pip install -r requirements-dev.txt,如果你不想安装开发依赖项,你只需执行常规操作pip install .即可。
| 归档时间: |
|
| 查看次数: |
354 次 |
| 最近记录: |