Bonjour,

Tout d'abord, je travaille sur Windows avec QTCreator comme EDI
- j'utilise MinGW73-64 que j'ai installé en même temps que Qt 5.13.0

J'ai effectué un test pour utiliser des scripts Python embarqués dans une application C++ et je me heurte à des difficultés.

J'ai commencé par installer Python 3.8, avec toutes les options (je n'ai pas pris de risque, ne sachant pas ce qui est nécessaire ou optionnel).
- version 64 bits: *Windows x86-64 executable installer* sur la page https://www.python.org/downloads/release/python-380/)

J'ai ensuite écrit le fichier CMakeList suivant:

Code CMakeLists : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
cmake_minimum_required(VERSION 3.5)
 
project(PythonTest LANGUAGES CXX)
 
set(CMAKE_INCLUDE_CURRENT_DIR ON)
 
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
 
find_package(PythonInterp 3.8 REQUIRED)
find_package(PythonLibs 3.8 REQUIRED)
include_directories(${PYTHON_INCLUDE_DIRS})
 
message(STATUS "PYTHON_LIBRARIES = ${PYTHON_LIBRARIES}")
message(STATUS "PYTHON_EXECUTABLE = ${PYTHON_EXECUTABLE}")
message(STATUS "PYTHON_INCLUDE_DIRS = ${PYTHON_INCLUDE_DIRS}")
message(STATUS "PYTHON_FRAMEWORK_INCLUDES=${PYTHON_FRAMEWORK_INCLUDES}")
message(STATUS "PYTHONLIBS_VERSION_STRING=${PYTHONLIBS_VERSION_STRING}")
message(STATUS "Python_FRAMEWORKS=${Python_FRAMEWORKS}")
 
add_executable(PythonTest main.cpp)
target_link_libraries(PythonTest ${PYTHON_LIBRARIES})

puis j'ai écris le code suivant:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include "Python.h"
 
void f()
{
  Py_Initialize();
}
 
int main(int argc, char *argv[])
{
  std::cout <<"test" << std::endl;
  return 0;
}
comme on peut le voir, il n'y a pas d'appel à la fonction `f()`. Or le code compile mais le programme crash.
Maintenant, si je commente la ligne `Py_Initialize();`. Le code compile et le programme fonctionne correctement.

J'en déduit qu'à l'initialisation du programme, le lien vers la librairie Python n'existe pas et que l'application se met à crasher.
j'ai tenté diverses choses, mais sans résultat:
- copie des dll dans le même dossier que l'executable généré;
- j'ai vérifié que le chemin vers la dll existait déjà dans la variable d'environnement PATH (C:/Program Files/Python38/) ce qui avait été fait via une option lors de l'installation de Python.

Je bloque ici et je demande donc votre avis.

Cordialement,

ps: voici le résultat de l'execution de CMake
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Starting to parse CMake project.
PYTHON_LIBRARIES = optimized;C:/Program Files/Python38/python38.dll;debug;C:/Program Files/Python38/python38_d.dll
PYTHON_EXECUTABLE = C:/Program Files/Python38/python.exe
PYTHON_INCLUDE_DIRS = C:/Program Files/Python38/include
PYTHON_FRAMEWORK_INCLUDES=
PYTHONLIBS_VERSION_STRING=3.8.0
Python_FRAMEWORKS=
Configuring done
Generating done
CMake Warning:
  Manually-specified variables were not used by the project:
 
    CMAKE_C_COMPILER
    QT_QMAKE_EXECUTABLE
 
CMake Project was parsed successfully.
ps2: résultat de la compilation
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
14:53:06: Le processus "C:\Program Files\CMake\bin\cmake.exe" s'est terminé normalement.
14:53:06: Débute : "C:\Program Files\CMake\bin\cmake.exe" --build . --target all
[ 50%] Building CXX object CMakeFiles/PythonTest.dir/main.cpp.obj
[100%] Linking CXX executable PythonTest.exe
[100%] Built target PythonTest
14:53:07: Le processus "C:\Program Files\CMake\bin\cmake.exe" s'est terminé normalement.
14:53:07: Temps écoulé : 00:01.
ps3: résultat de l'execution vu par la console Qt (pas grand chose d'interressant)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
15:02:12: Starting C:\Users\v\Sources\build-PythonTest-Desktop_Qt_5_13_0_MinGW_64_bit-Debug\PythonTest.exe ...
15:02:12: Le programme s'est terminé subitement.
15:02:12: The process was ended forcefully.
15:02:12: C:/Users/v/Sources/build-PythonTest-Desktop_Qt_5_13_0_MinGW_64_bit-Debug/PythonTest.exe crashed.
ps4: résultat de la compilation vu du bash pour git:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
$ ./PythonTest.exe
C:/Users/v/Sources/build-PythonTest-Desktop_Qt_5_13_0_MinGW_64_bit-Debug/PythonTest.exe: error while loading shared libraries: ?: cannot open shared object file: No such file or directory
ps5: résultat de la compilation vu de l'invite de commande windows: apparition d'une boite de message
Code : Sélectionner tout - Visualiser dans une fenêtre à part
L'application n'a pas réussi à démarrer correctement 0xc000007b. Cliquez OK pour fermer l'application
ps6: je mets quand même le résultat du Path même si je pense que c'est inutile
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
C:\Qt\Tools\mingw730_64\bin;
C:\Program Files\Python38\Scripts\;
C:\Program Files\Python38\;
C:\Program Files (x86)\Common Files\Oracle\Java\javapath;
C:\Program Files (x86)\Eziriz\.NET Reactor;
C:\Program Files (x86)\Intel\iCLS Client\;
C:\Program Files\Intel\iCLS Client\;
C:\WINDOWS\system32;
C:\WINDOWS;
C:\WINDOWS\System32\Wbem;
C:\WINDOWS\System32\WindowsPowerShell\v1.0\;
C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;
C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;
C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;
C:\Program Files\doxygen\bin;
C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\;
C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;
C:\Program Files (x86)\Microsoft SDKs\TypeScript\1.0\;
C:\Program Files\Microsoft SQL Server\120\Tools\Binn\;
C:\Program Files (x86)\Windows Live\Shared;
C:\Program Files\MiKTeX 2.9\miktex\bin\x64\;
C:\Qt\5.7\mingw53_32\bin;
c:\Program Files (x86)\Microsoft SQL Server\90\Tools\binn\;
C:\Program Files (x86)\Asymptote;
C:\Program Files (x86)\LyX 2.2\Perl\bin;
C:\WINDOWS\System32\OpenSSH\;
C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit\;
C:\Program Files\CMake\bin;
C:\Program Files\Intel\WiFi\bin\;
C:\Program Files\Common Files\Intel\WirelessCommon\;
C:\Users\v\AppData\Local\Microsoft\WindowsApps;