小编pla*_*pus的帖子

如何在不使用 setup.py 文件的情况下构建源代码分发版?

具有以下包结构

.
??? my_package
?   ??? __init__.py
??? setup.cfg
??? setup.py
Run Code Online (Sandbox Code Playgroud)

的内容 setup.py

from setuptools import setup
setup()
Run Code Online (Sandbox Code Playgroud)

的内容 setup.cfg

[metadata]
name = my_package
version = 0.1

[options]
packages = find:
Run Code Online (Sandbox Code Playgroud)

我可以my_package像这样构建轮子或源代码分发

pip wheel --no-deps -w dist .
# generates file ./dist/my_package-0.1-py3-none-any.whl
python setup.py sdist
# generates file ./dist/my_package-0.1.tar.gz
Run Code Online (Sandbox Code Playgroud)

但是根据setuptools 的维护者的说法,声明式构建配置是理想的,使用命令式构建将是一种代码味道。所以我们替换setup.pypyproject.toml

.
??? my_package
?   ??? __init__.py
??? setup.cfg
??? pyproject.toml
Run Code Online (Sandbox Code Playgroud)

的内容 pyproject.toml

[build-system]
build-backend = "setuptools.build_meta"
requires = ["setuptools", "wheel"]
Run Code Online (Sandbox Code Playgroud)

你仍然可以像以前一样构建一个轮子,它可以工作。但是 …

python setuptools pypi python-packaging pyproject.toml

22
推荐指数
1
解决办法
2488
查看次数

如何使用 pyproject.toml 构建万向轮

这是项目目录结构

\n
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 meow.py\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 pyproject.toml\n\n0 directories, 2 files\n
Run Code Online (Sandbox Code Playgroud)\n

这是meow.py

\n
def main():\n    print("meow world")\n
Run Code Online (Sandbox Code Playgroud)\n

这是pyproject.toml

\n
[build-system]\nrequires = ["setuptools"]\nbuild-backend = "setuptools.build_meta"\n\n[project]\nname = "meowpkg"\nversion = "0.1"\ndescription = "a package that meows"\n\n[project.scripts]\nmeow_world = "meow:main"\n
Run Code Online (Sandbox Code Playgroud)\n

构建此包时,无论是使用python3 -m pip wheel .还是使用python3 -m build,都会创建一个名为 like 的文件meowpkg-0.1-py3-none-any.whl,该文件无法安装在 Python 2 上。

\n
$ python2.7 -m pip install meowpkg-0.1-py3-none-any.whl\nERROR: meowpkg-0.1-py3-none-any.whl is not a supported wheel on this platform.\n
Run Code Online (Sandbox Code Playgroud)\n

但“meowpkg”实际上也适用于 Python 2。如何指示 setuptools 和/或 Wheel …

python pip setuptools python-wheel pyproject.toml

12
推荐指数
1
解决办法
1万
查看次数

如何在 Python 包元数据中指定要求

核心元数据规范记录了元数据字段Requires-External,它似乎用于指定系统(非 python)依赖项。

\n

但你实际上如何指定这个字段呢?这是我尝试过的:

\n
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 mypackage\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 setup.py\n
Run Code Online (Sandbox Code Playgroud)\n

内容setup.py

\n
from setuptools import setup\n\nsetup(\n    name="mypackage",\n    description="blah blah",\n    url=\'https://example.org\',\n    version="0.1",\n    packages=["mypackage"],\n    requires_external=[\n        "C",\n        "libpng (>=1.5)",\n        \'make; sys_platform != "win32"\',\n    ],\n)\n
Run Code Online (Sandbox Code Playgroud)\n

当我构建此包时,未包含元数据

\n
Metadata-Version: 2.1\nName: mypackage\nVersion: 0.1\nSummary: blah blah\nHome-page: https://example.org\nLicense: UNKNOWN\nPlatform: UNKNOWN\n\nUNKNOWN\n
Run Code Online (Sandbox Code Playgroud)\n

那么将Requires-External传递给 setuptools/distutils 的语法是什么?注意:这个问题不是询问Requires-Dist 元数据。

\n

python distutils metadata setuptools pypi

6
推荐指数
1
解决办法
551
查看次数

PyPI:名称与现有项目太相似

上传到PyPI时出现错误:

$ twine upload -r test dist/examplepkg-1.0.tar.gz           
Uploading distributions to https://test.pypi.org/legacy/
Uploading examplepkg-1.0.tar.gz
Error during upload. Retry with the --verbose option for more details.
HTTPError: 400 Bad Request from https://test.pypi.org/legacy/
The name 'examplepkg' is too similar to an existing project. See https://test.pypi.org/help/#project-name for more information.
Run Code Online (Sandbox Code Playgroud)

现有哪个项目?您如何找出它正在谈论的现有项目?

python packaging pypi twine

4
推荐指数
1
解决办法
1210
查看次数