gpt4 book ai didi

2020年Python打包

转载 作者:行者123 更新时间:2023-12-04 11:16:50 26 4
gpt4 key购买 nike

我试图在开发我的 Python 应用程序时养成良好的习惯,并将它们组织起来,就好像它们将来总是被其他人使用一样。其中一个关键部分是包装方面。
我已经阅读了一定数量的帖子、讨论和 pep 517/518。但是,我仍然不完全了解如何正确组织我的文件以进行打包。
我决定关注 setup.cfg路径而不是 pyproject.toml小路。那件事很清楚。我将在 setup.cfg 中确定运行时必需的包.
我也在用 virtualenv我知道与开发相关的包( blackpytest,... )应该在与 setup.cfg 不同的文件中定义,通常称为 requirements.txt .不清楚的一件事:应该setup.cfgrequirements.txt 的子集因此重复一些信息?这似乎是不好的做法,并且在某些时候肯定会变得断开连接并且难以维护。
我试图找到这个问题的答案。我找到了这个 article但我不明白如何添加这个

--index-url https://pypi.python.org/simple/ 
-e .
在 requirements.txt 中有助于避免问题甚至处理开发依赖项。
当他提出以下可能性时,我更加迷茫了:
--index-url https://pypi.python.org/simple/ 
-e https://github.com/foo/bar.git#egg=bar
-e .
这达到了什么目的?
最后是 setup.cfg与构建车轮包的方式兼容?

最佳答案

我通常按​​照以下两种方法将开发依赖项列表与我的包中的运行时依赖项分开:
方法#1
在我的 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",
)
正如你在上面看到的,我有一个 EXTRAS_REQUIRE带有 dev 的字典列出我的开发依赖项的关键。
然后我可以使用 pip安装软件包。如果我想排除安装我只做 pip install . ,这样只需要 python-dotenv显然是 mypackage软件包将安装在您的给定环境中。
但是,如果您想包含与开发相关的依赖项,您可以像这样指定额外的安装 pip install .['dev'] ,那么您所有的开发人员也将安装在环境中。
方法#2
如果你坚持将你的开发需求放在一个单独的需求文件中,你也可以这样做,我们称之为 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
并修改之前的 setup.py通过删除附加字典: setup.py

from setuptools import find_packages, setup

INSTALL_REQUIRES = ["python-dotenv"]

setup(
name="mypackage",
version="0.1.0",
description="My awesome package",
packages=find_packages(),
install_requires=INSTALL_REQUIRES,
python_requires=">=3.8",
)
然后你可以像 pip install -r requirements-dev.txt 一样安装你的包如果您不想安装开发依赖项,您只需执行常规 pip install .就是这样。

关于2020年Python打包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64687960/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com