setuptools_scm 版本受 Cython 生成的 C 代码中的注释影响
setuptools_scm version affected by comments in C code generated by Cython
对于这个稍微复杂的问题表示歉意——这是我的场景:
当有新的 git 标签时,我有一个管道可以从 Travis 将包部署到 PyPI。我的包包含 Cython 模块,生成的 C 代码也是存储库的一部分。
在 Travis 上构建期间,C 代码被重新生成,并且由于生成的注释包含特定于环境的路径,因此文件发生了变化。由于文件现在已从标记的提交中修改,setuptools_scm 不再是 returns 一个干净的版本号 (0.1
),而是类似于 0.2.dev0+...
,这使得部署到 PyPI 失败。
我目前解决此问题的想法是:
- 从存储库中排除 C 代码(我不想这样做)
- 在部署之前对最后一个标签进行硬重置(不确定这是否可行,但希望避免)
- 告诉 Cython 不要用注释注释 C 代码(我的首选解决方案,但显然 Cython 没有这样的选项?)
- 从确定版本号中排除 C 文件(如何?)
- 不要在 Travis 上重新生成 C 文件
以下哪个是首选解决方案?有没有更好的方法?
可以关闭在生成的 C 文件中包含原始代码(您的首选解决方案)。它在 Cython 中的记录非常少: documentation claims that it's a compiler option*
Cython.Compiler.Options.emit_code_comments = True
Copy the original source code line by line into C code comments in the generated code file to help with understanding the output. This is also required for coverage analysis.
然而,this is no longer true 实际上它是一个编译器指令(不同,因为它们只应用于本地而不是整个文件)。有很多方法可以应用这些,但一种方法是 setup.py:
setup(
ext_modules = cythonize("example.pyx",
compiler_directives={'emit_code_comments': False})
)
我怀疑 Cython 文件的确切文本仍然有点容易因环境的微小变化而发生变化,因此仅此一项可能无法 100% 解决您的问题。
*
- 我想文档会在某个时候得到修复,我引用的 link 会过时...
对于这个稍微复杂的问题表示歉意——这是我的场景:
当有新的 git 标签时,我有一个管道可以从 Travis 将包部署到 PyPI。我的包包含 Cython 模块,生成的 C 代码也是存储库的一部分。
在 Travis 上构建期间,C 代码被重新生成,并且由于生成的注释包含特定于环境的路径,因此文件发生了变化。由于文件现在已从标记的提交中修改,setuptools_scm 不再是 returns 一个干净的版本号 (0.1
),而是类似于 0.2.dev0+...
,这使得部署到 PyPI 失败。
我目前解决此问题的想法是:
- 从存储库中排除 C 代码(我不想这样做)
- 在部署之前对最后一个标签进行硬重置(不确定这是否可行,但希望避免)
- 告诉 Cython 不要用注释注释 C 代码(我的首选解决方案,但显然 Cython 没有这样的选项?)
- 从确定版本号中排除 C 文件(如何?)
- 不要在 Travis 上重新生成 C 文件
以下哪个是首选解决方案?有没有更好的方法?
可以关闭在生成的 C 文件中包含原始代码(您的首选解决方案)。它在 Cython 中的记录非常少: documentation claims that it's a compiler option*
Cython.Compiler.Options.emit_code_comments = True
Copy the original source code line by line into C code comments in the generated code file to help with understanding the output. This is also required for coverage analysis.
然而,this is no longer true 实际上它是一个编译器指令(不同,因为它们只应用于本地而不是整个文件)。有很多方法可以应用这些,但一种方法是 setup.py:
setup(
ext_modules = cythonize("example.pyx",
compiler_directives={'emit_code_comments': False})
)
我怀疑 Cython 文件的确切文本仍然有点容易因环境的微小变化而发生变化,因此仅此一项可能无法 100% 解决您的问题。
*
- 我想文档会在某个时候得到修复,我引用的 link 会过时...