- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想为 CPython 构建一个 C 扩展。传统上我可以用 setup.py
做到这一点文件。但是,由于 PEP 517 中提到的原因,我更喜欢使用 pyproject.toml
的声明性方法。 .我明白 setuptools
是唯一可以在所有相关平台上构建 C 扩展的构建后端。事实上,除了过时的 distutils
之外,我根本不知道有任何后端能够构建 C 扩展。 .
在此背景下,一个共同的setup.py
看起来像这样:
from setuptools import setup, Extension
kwargs = dict(
name='mypackage',
# more metadata
ext_modules=[
Extension('mypackage.mymodule', ['lib/mymodule.c',
'lib/mypackage.c',
'lib/myalloc.c'],
include_dirs=['lib'],
py_limited_api=True)])
setup(**kwargs)
现在,挑战是将上述内容放入
pyproject.toml
加一个
setup.cfg
.
setuptools
文档建议使用
pyproject.toml
像这样:
[build-system]
requires = [
"setuptools >=52.0",
'wheel >= 0.36']
build-backend = "setuptools.build_meta"
看
setup.cfg
.但是,我还没有找到关于如何翻译
ext_modules
的任何解释。 kwarg,尤其是
Extension()
调用,进入
setup.cfg
句法。
最佳答案
pyproject.toml
严格来说并不意味着要替换 setup.py
,而是在仍然需要时确保其正确执行(参见 PEP 517 和 my answer here ):
Where the
build-backend
key exists, this takes precedence and the source tree follows the format and conventions of the specified backend (as such nosetup.py
is needed unless the backend requires it). Projects may still wish to include asetup.py
for compatibility with tools that do not use this spec.
setuptools
尝试将所有内容从脚本移动到配置文件中,
it's not always possible :
There are two types of metadata: static and dynamic.
- Static metadata (
setup.cfg
): guaranteed to be the same every time. This is simpler, easier to read, and avoids many common errors, like encoding errors.- Dynamic metadata (
setup.py
): possibly non-deterministic. Any items that are dynamic or determined at install-time, as well as extension modules or extensions tosetuptools
, need to go intosetup.py
.Static metadata should be preferred and dynamic metadata should be used only as an escape hatch when absolutely necessary.
setup.cfg
-only projects现在只有 2 年和
setuptools
will use an imaginary setup.py
if it doesn't exist反正。
setup.cfg
中。归档并将其余部分留在
setup.py
:
setup.cfg
[metadata]
name = mypackage
; more metadata
setup.py
from setuptools import setup, Extension
setup_args = dict(
ext_modules = [
Extension(
'mypackage.mymodule',
['lib/mymodule.c', 'lib/mypackage.c', 'lib/myalloc.c'],
include_dirs = ['lib'],
py_limited_api = True
)
]
)
setup(**setup_args)
但我会把所有东西都放进
setup.py
.
关于python - 如何构建符合 PEP 517 的 C 扩展,即使用 pyproject.toml 而不是 setup.py?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66157987/
我有一个 TOML 文档,其中某些键可能存在也可能不存在。例如。该文件是有效文件: foo = "bar" 但这也是有效的: foo = "bar" something = "else" 我现在正尝试
我正在使用 Dynaconf (3.1.2) 来处理我的 python 应用程序设置。 如果我在 settings.toml 和 .secrets.toml 中使用相同的 key ,则这些部分最后仅包
我正在使用 Dynaconf (3.1.2) 来处理我的 python 应用程序设置。 如果我在 settings.toml 和 .secrets.toml 中使用相同的 key ,则这些部分最后仅包
TOML said“TOML和YAML都强调人类的可读性,例如使人们更容易理解给定行目的的注释。TOML的不同之处在于将它们组合在一起,允许注释(与JSON不同),但保留了简单性(与YAML不同)。”
我正在尝试为 TOML 文档实现可链接的查询执行。 A Query是更改 TOML 文档并可能返回另一个 Query 的东西应在其自身之后执行的对象。 Query执行的获取前一个查询的结果(如果有的话
看着 toml repo ,我没有看到任何关于键命名约定的限制/建议 看起来大部分变量都是 lowercase但想知道 key 的最佳实践 - 命名约定是什么? 假设我想要一个名为 firstname
我想从 TOML 文件生成 JSON。 JSON 结构应该是这样的,在对象数组中包含对象数组: { "things": [ { "a": "thing1
背景 我正要尝试从GitHub下载的Python包,发现它没有setup.py ,所以我无法安装它 pip install -e 相反,该软件包具有 pyproject.toml 文件似乎具有与 s
获取以下 TOML 数据: [[items]] foo = 10 bar = 100 [[items]] foo = 12 bar = 144 还有下面的 rust 代码: use serde_der
“WSO IS 5.9.0”的新功能是 deployment.toml ,但我还没有找到配置选项,也没有找到如何从这个文件设置 xml 配置文件的方法。 例如,如果我想在 carbon.xml 中启用
“WSO IS 5.9.0”的新功能是 deployment.toml ,但我还没有找到配置选项,也没有找到如何从这个文件设置 xml 配置文件的方法。 例如,如果我想在 carbon.xml 中启用
从 toml 文件中读取的字符串值包含额外的引号: # Toml file string_key = "fdsafdsafdsfds" 代码: let cfg_file_content = g
我正在尝试读取 TOML 文件以创建一个结构,该结构包含具有关联值的枚举向量。这是示例代码: extern crate serde; #[macro_use] extern crate serde_d
我有共享公共(public)资源且无法同时执行的测试。这些测试因 cargo test 而失败,但适用于 RUST_TEST_THREADS=1 cargo test。 我可以修改测试以等待全局互斥锁
我使用以下方式安装了依赖项: go get github.com/BurntSushi/toml 我在与 main.go 相同的文件夹中创建了一个 toml 文件: . |-- cloud.toml
我有一个包含两个可执行文件的 Rust 项目: src └── bin ├── app.rs └── tool.rs tool 程序作为app 的子进程运行。 (需要进行分离,因为 t
背景 我目前正在编写一个绑定(bind) C 库的 crate ,我需要用户指定构建库的位置。以前,我见过 llvm-sys 的句柄crate 使用环境变量。但是,如果我经常使用它,每次我想运行一个项
所以我在 GitHub 存储库中有几个文件,我想设置一个自定义的 404 错误页面。当我搜索它时,它要求我在 netlify.toml 中插入一些东西。文件,它应该在我的根目录中(我认为这意味着存储库
Pip 支持 pyproject.toml文件,但到目前为止,新模式的所有实际使用都需要一个 3rd 方工具来自动生成这些文件(例如,诗歌和 pip)。不像 setup.py这已经是人类可写的,pyp
我希望有这样的东西:cargo install stopwatch 但在文档中找不到它。 查找包版本并手动将包添加到.toml: [dependencies] stopwatch="0.0.6" 感觉
我是一名优秀的程序员,十分优秀!