2014-11-28 3 views
3

저는 파이썬을 윈도우의 C 응용 프로그램에 포함 시켰습니다. 배포하려면 Python 폴더 전체를 내 exe 옆에 배치하십시오.C - 배포판에 파이썬 포함하기

\Installation Dir 
     app.exe 
     script.py 
     \python 

테스트로서 나는 C 어플리케이션을 매우 간단하게 만들었습니다. 인터프리터를 설정하고 script.py을 실행하려고 시도합니다. 여기

는 C 소스의 전체 내용은 다음과 같습니다

#include <Python.h> 
#include <stdlib.h> 

int main(int argc, char* argv[]){ 

    Py_OptimizeFlag=1; 
    Py_SetPythonHome("python"); 
    Py_SetProgramName(argv[0]); 
    Py_Initialize(); 

    PySys_SetPath("python/Lib;python/DLLs;python/Lib/site-packages;"); 

    PySys_SetArgv(argc, argv); 
    PyObject* PyFileObject = PyFile_FromString("script.py", "r"); 
    PyRun_SimpleFileEx(PyFile_AsFile(PyFileObject), "script.py", 1); 

    Py_Finalize(); 
} 

이 가끔 ... 잘 작동하는 것 같다. 일부 컴퓨터에서는 ImportError: DLL load failed 오류가 발생하며 일반적으로 _socket을 참조합니다.

명시 적으로 경로를 LibDLLs 폴더를 가리 키도록 설정 했으므로이 오류가 발생하는 이유를 알 수 없습니까?

기존의 Python 버전과 충돌이 발생하지만, 이미 설치된 다른 버전의 Python과 함께 다른 PC에 성공적으로 설치되었습니다.

임베디드 파이썬이 필요한 것을 찾을 수 있도록 설정해야하는 다른 변수 또는 레지스트리 설정이 있습니까?

이상적으로는이 설치를 '자체 포함'하고 잠재적으로 다른 Python 버전의 사용자가 설치할 수 없으므로 레지스트리 값을 설정하지 않는 것이 좋습니다.

아이디어가 있으십니까?

+0

파이썬이 설치되지 않은 PC에서이 방법을 사용해 보셨습니까? 나는'Py_SetPythonHome ("python")'이''Py_SetPythonHome ("C : \ Path \ To \ My \ AppFolder")의 행을 따라 무언가가 될 것이라고 예상 할 것이다 ... –

+0

불행히도, 나는 PC를 가지고 있지 않다. 파이썬없이 설치 가능! VM을 설정하는 과정에 ... 절대 경로는 까다 롭습니다. 사용자가 프로그램을 어디서나 (잠재적으로) 설치할 수 있기 때문입니다. 그러나 나는 어떤 방법으로'getcwd'를 사용하여 경로를 구성 할 수 있다고 가정합니다. – jramm

+1

예, 현재 실행 파일의 경로를 얻는 방법은 다양합니다. 그냥 그렇게하고 pythonhome으로 그 경로 + "/ python"을 설정하고 난 당신이 사업에있을 거라고 생각 ... –

답변

0

내 파이썬 폴더에서 키워드 "_socket"을 검색하면 재미있는 것을 발견했습니다. "python/libs"폴더에는 "_socket.lib"가 있고, "python/DLLs"폴더에는 "_socket.pyd"가 있습니다. 이 특정 라이브러리에 대한 자세한 내용은 알 수 없지만 단순히 문자열을 PySys_SetPath에 "python/libs"를 추가하여 문제를 해결할 수 있습니다. 또는 자신 만의 all-OK 환경에서 sys.path를 참조하여 더 많은 폴더를 포함 할 수 있습니다.

이 추측의 배경은 .pyd 파일이 C/C++ 프로그래밍을 수행 할 때 기본적으로 .dll 파일과 동일한 역할을한다고 들었습니다. 동적 링크 라이브러리를 컴파일하면 .h, .dll 및 .lib 파일이 동시에 생성됩니다. .dll에는 주 코드가 들어 있고 .lib에는 dll에서 내 보낸 내용이 들어 있습니다.