我正在尝试编译一个在Python中使用的C文件。该文件是微分代数方程(DAE)的求解器。我的问题是,当我编译setup.py文件时,收到错误消息无法打开源文件:'daesolver.c':没有这样的文件或目录。由于C文件非常复杂,因此我尝试使用一个更简单的示例执行相同的操作。我使用(https://tutorialedge.net/python/python-c-extensions-tutorial/)中Elliot Forbes提供的HelloWorld示例。即使使用此非常简单的功能,我也会收到相同的错误。 这是我从build命令收到的完整输出。
C:\Users\Administrator>python c:\temp\teste_C2py\setup.py build
running build
running build_ext
building 'myModule' extension
C:\Program Files (x86)\Microsoft Visual
Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\HostX86\x64\cl.exe /c
/nolog
o /Ox /W3 /GL /DNDEBUG /MD -IC:\ProgramData\Anaconda3\include -
IC:\ProgramData\Anaconda3\include "-IC:\Program Files (x8
6)\Microsoft Visual
Studio\2017\Community\VC\Tools\MSVC\14.16.27023\ATLMFC\include" "-
IC:\Program Files (x86)\Microsoft
Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include" "-
IC:\Program Files (x86)\Windows Kits\10\include\10.0.1
7763.0\ucrt" "-IC:\Program Files (x86)\Windows
Kits\10\include\10.0.17763.0\shared" "-IC:\Program Files (x86)\Windows Ki
ts\10\include\10.0.17763.0\um" "-IC:\Program Files (x86)\Windows
Kits\10\include\10.0.17763.0\winrt" "-IC:\Program Files
(x86)\Windows Kits\10\include\10.0.17763.0\cppwinrt" /Tctest.c
/Fobuild\temp.win-amd64-3.7\Release\test.obj
test.c
c1: fatal error C1083: Cannot open source file: 'test.c': No such file or
directory
error: command 'C:\\Program Files (x86)\\Microsoft Visual
Studio\\2017\\Community\\VC\\Tools\\MSVC\\14.16.27023\\bin\\Ho
stX86\\x64\\cl.exe' failed with exit status 2
这是test.c文件
#include <Python.h>
// Function 1: A simple 'hello world' function
static PyObject* helloworld(PyObject* self, PyObject* args)
{
printf("Hello World\n");
return Py_None;
}
// Our Module's Function Definition struct
// We require this `NULL` to signal the end of our method
// definition
static PyMethodDef myMethods[] = {
{ "helloworld", helloworld, METH_NOARGS, "Prints Hello World" },
{ NULL, NULL, 0, NULL }
};
// Our Module Definition struct
static struct PyModuleDef myModule = {
PyModuleDef_HEAD_INIT,
"myModule",
"Test Module",
-1,
myMethods
};
// Initializes our module using our above struct
PyMODINIT_FUNC PyInit_myModule(void)
{
return PyModule_Create(&myModule);
}
这是setup.py
from distutils.core import setup, Extension
setup(name = 'myModule', version = '1.0', \
ext_modules = [Extension('myModule', ['test.c'])])
两个文件都位于同一文件夹c:\ temp \ teste_C2py。
我正在Anaconda发行版64位中使用Python 3.7(我也想对x86这样做)。
我已将Visual Studio 2017(社区)与所有必要的编译器安装在相同的环境中(至少我认为是这样)。
真正奇怪的是,当我在VM中仅安装vs构建工具2017时,我被迫这样做,但是当我尝试在另一台计算机上复制它时,却出现了这个错误。 我还弄乱了我最初进行这项工作的环境,现在我再也做不到。
我还设置了环境变量VS150COMNTOOLS = C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Community \ Common7 \ Tools
似乎我在Visual Studio配置中缺少任何内容,因为找不到没有相同文件夹的文件没有意义。
答案 0 :(得分:0)
我发现了问题。从前,这是一件非常愚蠢的事情。我试图从python.exe所在的文件夹中运行安装脚本(因为我的计算机中有不同版本的Python)。但是,如果不是这样,我将移动到setup.py文件所在的文件夹并运行coomand,而没有任何路径将setup.py视为构建成功!我不知道为什么相对路径在这里不起作用。 希望对您有所帮助!