c - C:创建/使用头文件和 Cython、Cythonize setup.py、MSVC 和 GCC 问题需要明确吗?
问题描述
C:Cython、Cythonize、setup.py/MSVC、GCC 问题和创建/使用头文件需要清晰
大家好,
我对 Cython 比较陌生,对 C 语言也很陌生,但对 Python、Visual Basic 和 Java 有一些编程经验。
对于我当前的项目,我的机器在 Windows Pro 10 1909 x64、Python 3.7.9 x64 和 Cython 0.29.21 上运行,我的最终目标是创建一个包含所有模块的 EXE 文件。
我目前还没有包含任何cdef
声明或类似的声明,我计划逐步添加这些声明。本质上,我目前正在做的是在概念验证阶段,以表明我可以毫无问题地编译和运行当前和未来的代码。
我有一个__main__
模块存储在根项目文件夹中,我的其他(一些非常大的)Python模块重命名为.pyx
处理不同类型文件(、、、、等)的文件.csv
,每个.json
文件都有自己的特征和提取方法,存储在一个' ' 文件夹。.html
.xml
includes
据我了解,头文件包含函数定义,然后根据需要调用这些函数定义,以充当子例程和主模块之间的桥梁。我目前还没有创建任何头文件,因为我需要明确几点。
我也无法通过setup.py
( setuptools
) 通过MSVC
和进行 Cythonizing GCC
。
下面是迄今为止概述的步骤的讨论,以达到关于 setup.py 的这一点,GCC
并直接从提示运行,最后是我的主要问题。
步骤1
setup.py
我第一次尝试编译代码是从提升的命令提示符准备文件。
from setuptools import Extension, setup
from Cython.Build import cythonize
extensions = [
Extension("main", ["__main__.pyx"],
include_paths=r"C:\path\to\parsing_company_accounts_master_cython\includes"),
]
setup(
name="iXBRLConnect",
ext_modules=cythonize(extensions, compiler_directives={'language_level' : "3"}),
)
但是,在 Python 3.7.9 x64 中,我得到以下输出。
python setup.py bdist
running bdist
running bdist_dumb
running build
running build_ext
building 'main' extension
error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/
x64 Native Tools Command Prompt
从 2015 年开始,在提升的(任何版本的 VS 或独立构建工具)中运行时,我在所有版本的 Python 和安装构建工具的许多变体时都有同样的错误。
在此站点上搜索指向需要添加的许多不同的 SDK、库等,但是在遵循了许多答案和多次重新启动之后,我仍然无法setup.py
运行。
我可以使用 VS 社区版作为 GUI 进行编译,但是在使用命令行时所有的努力似乎都被混淆了(没有其他原因,只是为了保持精简安装)。目前尚不清楚为什么提示路线不起作用。
第2步
为了不甘示弱,我尝试安装GCC - MinGW-w64
( https://wiki.python.org/moin/WindowsCompilers ),这是一个支持 Python 3.4 的替代编译器。
注意到 Python 3.4 已经过时,我卸载 Python 3.7.9 x64,安装 3.4 并重新安装我的pip
站点包。
但是,安装BeautifulSoup4
给了我这个消息:
RuntimeError: Python 3.5 or later is required
我会用大量的盐来处理 Python 3.4 的 EOL 问题,但BS4
它是我项目的一个关键库,所以这几乎是一个展示者。
第 3 步
最后,我尝试直接在命令行上构建文件。
首先,我将其他.pyx
模块移动到"c:\path_with_spaces\to\includes"
(总共 9 个)中,将__main__
.pyx 保留在主项目文件夹中,然后从项目文件夹中运行下一个命令。
cython -3 --annotate --embed=main __main__.pyx --include-dir "c:\path_with_spaces\to\includes"
问题
所以,以上所说和所做的一切(呸!),以下是我需要澄清的几点: -
Q1:在我看来,' include_paths
'/' include-dir
' 参数指定其他附加目录只是为了创建新的 C 文件 - 我推测这是因为现有*.pyx
模块旁边没有头文件?[最初,我天真地以为 Cython 会自动提升标题和.c
文件?相反,根本没有-.c
或.h
-为它们生成任何东西。] 我的“--include_dirs”命令行语法有什么问题,因为.c
无论如何都应该提出文件,而我只是“插入”头文件?这么说是没有错的。或者,正如您对库文件所期望的那样,包含的文件是否只是为了被读取而没有对其采取其他操作?
Q2:随着我不断了解越来越清楚,头文件需要提前准备好,根据这个:https ://cython.readthedocs.io/en/latest/src/userguide/external_C_code.html和这个:http ://hplgit.github.io/primer.html/doc/pub/cython/cython-readable.html但是据我从他们的例子中可以确定(除非我看错了),他们只打电话他们的模块在某个时候来自主模块。取最后一个链接,我dice6_cwrap
对示例中的''不太清楚dice6_cwrap.pyx
(我认为应该在主模块中引用它,但在本示例中没有直接显示)。另外,我是否还需要其他文件,也许是某种清单?
Q3:部分回答 Q2,我想我可以将模块“链接”在一起,如下所述:C++ 中包含的链如何起作用?? 这对我来说很重要,因为我的代码到目前为止的工作方式是加载每个模块(取决于找到的文件),然后以“链”序列运行模块以首先解析汤对象中的所有元素,遍历每个行元素,最后提取每个属性并将它们插入到一个公共数据库中。在实际实践中,这可能意味着从子模块中的 'start' 方法开始计算并取决于所讨论的属性,总共最多有 8 个“链接”。仅供参考,其中一些模块还包括 pandas、numpy 和多处理模块。大声思考 - 包括头文件,这意味着准备 16 个文件?哇!(但是,有一点运气和手指交叉 - C 编译与 Python 解释的速度提升......其他瓶颈允许)。
为我的华夫饼道歉,我欢迎你对我如何继续前进的想法。
提前致谢。
解决方案
推荐阅读
- excel - shell命令的参数vbNormalNoFocus不起作用
- arrays - 如何在不使用循环的情况下检查 shell 脚本中的数组中是否存在元素
- ios - 如何通过 UIAppearance 控制 UITableViewCell 的标签外观?
- django - Django,如何在另一个视图中重用变量结果?
- python - 按Python中字符串中的数字对列表开头包含数字的字符串列表进行排序
- nginx - Nginx 将流量发送到错误的端口
- powershell - 来自数据源的 String 类型的值无法转换为 Real 类型
- reactjs - 反应:重置密码发送带有重置密码链接的电子邮件以重置密码
- android - 使用 ADB (Android 10) 从计算机访问外部存储的直接方式
- git - 如何通过putty中的psftp将文件夹从git repo传输到服务器?