具有以下包结构
.
??? 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.py为pyproject.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)
你仍然可以像以前一样构建一个轮子,它可以工作。但是 …
这是项目目录结构
\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\nRun Code Online (Sandbox Code Playgroud)\n这是meow.py:
def main():\n print("meow world")\nRun Code Online (Sandbox Code Playgroud)\n这是pyproject.toml:
[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"\nRun Code Online (Sandbox Code Playgroud)\n构建此包时,无论是使用python3 -m pip wheel .还是使用python3 -m build,都会创建一个名为 like 的文件meowpkg-0.1-py3-none-any.whl,该文件无法安装在 Python 2 上。
$ 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.\nRun Code Online (Sandbox Code Playgroud)\n但“meowpkg”实际上也适用于 Python 2。如何指示 setuptools 和/或 Wheel …
核心元数据规范记录了元数据字段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\nRun Code Online (Sandbox Code Playgroud)\n内容setup.py
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)\nRun Code Online (Sandbox Code Playgroud)\n当我构建此包时,未包含元数据
\nMetadata-Version: 2.1\nName: mypackage\nVersion: 0.1\nSummary: blah blah\nHome-page: https://example.org\nLicense: UNKNOWN\nPlatform: UNKNOWN\n\nUNKNOWN\nRun Code Online (Sandbox Code Playgroud)\n那么将Requires-External传递给 setuptools/distutils 的语法是什么?注意:这个问题不是询问Requires-Dist 元数据。
\n上传到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 ×4
pypi ×3
setuptools ×3
distutils ×1
metadata ×1
packaging ×1
pip ×1
python-wheel ×1
twine ×1