如何使用distutils编译简单的python嵌入式程序
这是我的密码:如何使用distutils编译简单的python嵌入式程序,python,visual-c++,compilation,Python,Visual C++,Compilation,这是我的密码: from distutils.msvc9compiler import MSVCCompiler target_python_file = "main.py" ccode = """#include <Python.h> int main(int argc, char *argv[]) { PyObject* PyFileObject; putenv("PYTHONPATH=lib"); putenv("PYTHONHOME=."); Py_Set
from distutils.msvc9compiler import MSVCCompiler
target_python_file = "main.py"
ccode = """#include <Python.h>
int
main(int argc, char *argv[])
{
PyObject* PyFileObject;
putenv("PYTHONPATH=lib");
putenv("PYTHONHOME=.");
Py_SetProgramName(argv[0]);
Py_Initialize();
PyFileObject = PyFile_FromString("%s", "r");
PyRun_SimpleFileEx(PyFile_AsFile(PyFileObject), "%s", 1);
Py_Finalize();
return 0;
}
""" % (target_python_file, target_python_file)
with open("main.c","w") as main:
main.write(ccode)
compiler = MSVCCompiler()
compiler.compile(["main.c"],include_dirs=["C:/Python27/include"])
compiler.link("",["main.obj"],"python_launcher.exe",libraries=["python27"], library_dirs=["C:/Python27/libs"])
从distutils.msvc9compiler导入MSVCCompiler
target\u python\u file=“main.py”
ccode=“”#包括
int
main(int argc,char*argv[])
{
PyObject*PyFileObject;
putenv(“PYTHONPATH=lib”);
putenv(“PYTHONHOME=.”);
Py_SetProgramName(argv[0]);
Py_初始化();
PyFileObject=PyFile_FromString(“%s”、“r”);
PyRun_simplefilex(PyFile_AsFile(PyFileObject),“%s”,1);
Py_Finalize();
返回0;
}
“”“%(目标python文件,目标python文件)
以open(“main.c”、“w”)作为main:
main.write(ccode)
编译器=MSVCCompiler()
compiler.compile([“main.c”],includedirs=[“c:/Python27/include”])
compiler.link(“,[“main.obj”],“python_launcher.exe”,libraries=[“python27”],library_dirs=[“C:/python27/libs”])
当我运行此程序时,会出现python_launcher.exe
,但是,当我尝试运行它时,会发现一个无效的win32应用程序错误
< >我可以使用VisualC++ 2008编译相同的代码,它是有效的,但是我想利用ditudil来实现这一点,因为我希望它能为编译器找出配置选项。
调试
我试图在WinDebug中打开创建的可执行文件,但无法打开,因为发生了以下情况:
土耳其部分表示它不是有效的Win32应用程序。为使代码正常工作,对代码进行了两次修改:
X:\dev\null>python_launcher.exe
ImportError: No module named site
putenv("PYTHONPATH=C:/Python27/Lib");
putenv("PYTHONHOME=C:/Python27");
from distutils.msvc9compiler import MSVCCompiler
target_python_file = "main.py"
ccode = """#include <Python.h>
int
main(int argc, char *argv[])
{
PyObject* PyFileObject;
putenv("PYTHONPATH=C:/Python27/Lib");
putenv("PYTHONHOME=C:/Python27");
Py_SetProgramName(argv[0]);
Py_Initialize();
PyFileObject = PyFile_FromString("%s", "r");
PyRun_SimpleFileEx(PyFile_AsFile(PyFileObject), "%s", 1);
Py_Finalize();
return 0;
}
""" % (target_python_file, target_python_file)
with open("main.c","w") as main:
main.write(ccode)
compiler = MSVCCompiler()
compiler.compile(["main.c"],include_dirs=["C:/Python27/include"])
compiler.link_executable(["main.obj"],"launch", libraries=["python27"], library_dirs=["C:/Python27/libs"])
从distutils.msvc9compiler导入MSVCCompiler
target\u python\u file=“main.py”
ccode=“”#包括
int
main(int argc,char*argv[])
{
PyObject*PyFileObject;
putenv(“PYTHONPATH=C:/Python27/Lib”);
putenv(“PYTHONHOME=C:/Python27”);
Py_SetProgramName(argv[0]);
Py_初始化();
PyFileObject=PyFile_FromString(“%s”、“r”);
PyRun_simplefilex(PyFile_AsFile(PyFileObject),“%s”,1);
Py_Finalize();
返回0;
}
“”“%(目标python文件,目标python文件)
以open(“main.c”、“w”)作为main:
main.write(ccode)
编译器=MSVCCompiler()
compiler.compile([“main.c”],includedirs=[“c:/Python27/include”])
compiler.link_可执行文件([“main.obj”],“launch”,libraries=[“python27”],library_dirs=[“C:/python27/libs”])
您得到的确切调用堆栈是什么?@Abhijit我无法获得堆栈跟踪。请参阅我的最新问题。
from distutils.msvc9compiler import MSVCCompiler
target_python_file = "main.py"
ccode = """#include <Python.h>
int
main(int argc, char *argv[])
{
PyObject* PyFileObject;
putenv("PYTHONPATH=C:/Python27/Lib");
putenv("PYTHONHOME=C:/Python27");
Py_SetProgramName(argv[0]);
Py_Initialize();
PyFileObject = PyFile_FromString("%s", "r");
PyRun_SimpleFileEx(PyFile_AsFile(PyFileObject), "%s", 1);
Py_Finalize();
return 0;
}
""" % (target_python_file, target_python_file)
with open("main.c","w") as main:
main.write(ccode)
compiler = MSVCCompiler()
compiler.compile(["main.c"],include_dirs=["C:/Python27/include"])
compiler.link_executable(["main.obj"],"launch", libraries=["python27"], library_dirs=["C:/Python27/libs"])