MRK*_*MRK 7 python ctypes distutils python-3.x python-packaging
我有一个 Python 包 (3.7),我在其中制作了一个模块,该模块使用 C 库来解决性能问题。该 C 库通过 Ctypes 连接。现在,我有一个 Makefile 将 C 库编译为 .so(在 Windows 中使用 Cygwin minGW),但是,为了能够更轻松地共享包,我希望在安装时使用该库(setup.py ),这样编译器/make 就不必单独安装等。
但是,我无法找到用于 distutils 或类似方法来编译 C 库(不是 Python 扩展,纯 C)的工作方法。我最接近工作解决方案的是:https : //stackoverflow.com/a/34830639/9863065
当按照上述链接进行操作时,.pyd 编译时没有错误,但是,当使用 Ctypes 加载文件时,我在尝试访问 C 库中定义的函数时收到 AttributeErrors。
编辑:我做了这个最小的、可重复的例子:https : //github.com/mkielg11/ctypes_distribution
使用上面的示例时,我得到以下信息:
C:\...\ctypes_distribution>python setup.py build
running build
running build_py
running build_ext
building 'xclib' extension
C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.26.28801\bin\HostX86\x64\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -Ixpackage/deps/xclib/include/ -IC:\Anaconda3\include -IC:\Anaconda3\include "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.26.28801\include" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\cppwinrt" /Tcxpackage/deps/xclib/cfile.c /Fobuild\temp.win-amd64-3.7\Release\xpackage/deps/xclib/cfile.obj
cfile.c
C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.26.28801\bin\HostX86\x64\link.exe /nologo /INCREMENTAL:NO /LTCG /DLL /MANIFEST:EMBED,ID=2 /MANIFESTUAC:NO /LIBPATH:C:\Anaconda3\libs /LIBPATH:C:\Anaconda3\PCbuild\amd64 "/LIBPATH:C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.26.28801\lib\x64" "/LIBPATH:C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\ucrt\x64" "/LIBPATH:C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x64" build\temp.win-amd64-3.7\Release\xpackage/deps/xclib/cfile.obj /OUT:build\lib.win-amd64-3.7\xclib.cp37-win_amd64.pyd /IMPLIB:build\temp.win-amd64-3.7\Release\xpackage/deps/xclib\xclib.cp37-win_amd64.lib
Generating code
Finished generating code
C:\...\ctypes_distribution>cd xpackage
C:\...\ctypes_distribution\xpackage>python xpackage.py
Example package python file
Traceback (most recent call last):
File "xpackage.py", line 32, in <module>
print('Result of example package function:', xpackage_function())
File "xpackage.py", line 24, in xpackage_function
get_magic_number_func = xlib.return_magic_number
File "C:\Anaconda3\lib\ctypes\__init__.py", line 369, in __getattr__
func = self.__getitem__(name)
File "C:\Anaconda3\lib\ctypes\__init__.py", line 374, in __getitem__
func = self._FuncPtr((name_or_ordinal, self))
AttributeError: function 'return_magic_number' not found
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
357 次 |
| 最近记录: |