Rumah > Soal Jawab > teks badan
我在系统中安装了 Python2.7 和 lxml,通过命令行执行 import lxml.html
没有问题。
但是我在 C++ 中嵌入 Python,调用 PyRun_SimpleString("import lxml.html");
就会提示下面的错误
我已经把 Python 安装目录下的 DLLs
Lib
python27.dll
都拷贝到了我 C++ 程序的目录下了,请问大神这是个什么情况?
阿神2017-04-17 17:35:57
Penyelesaian ditemui:
Langkah untuk mencari masalah:
Saya menyalin python.exe dalam direktori pemasangan ke direktori saya dan melaksanakannya dengan python.exe import lxml.html
dan mendapati bahawa tiada masalah Itulah perbezaan antara exe yang saya tulis sendiri dan python. exe. Saya rasa ia mungkin masalah CRT.
Buka manifes python.exe dan cari kebergantungan <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
Buka manifes etree.pyd dan ketahui bahawa tiada maklumat yang bergantung pada CRT.
Exe saya ditulis dalam VS2013. Apabila saya membuka manifes, saya juga mendapati tiada maklumat yang bergantung pada CRT.
Sebab tekaan:
Memandangkan eptree.pyd tidak mempunyai maklumat pergantungan CRT, ia menggunakan maklumat pergantungan CRT dalam program utama, yang terdapat dalam python.exe, jadi pemuatan berjaya. Ia adalah tragedi jika ia tidak dijumpai dalam exe saya.
Penyelesaian:
Terdapat dua cara untuk menyelesaikan masalah ini:
Daripada menggunakan VS2013, gunakan VS2008 untuk menyusun exe Manifes dalam versi Keluaran yang disusun mempunyai maklumat pergantungan CRT, yang tidak berbeza daripada python.exe.
Juga gunakan VS2013 untuk menyusun exe, tetapi anda perlu mengubah suai manifes etree.pyd dan menambah maklumat pergantungan CRT <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
Kedua-dua kaedah boleh menyelesaikan masalah!
Sedikit keliru
Tiada maklumat pergantungan CRT dalam manifes VS2013 Bagaimanakah ia menyelesaikan masalah konflik CRT berbilang versi? Atau adakah VS2013 menulis maklumat ini ke lokasi lain?
Adakah DLL tanpa maklumat pergantungan CRT benar-benar menggunakan maklumat pergantungan CRT dalam program utama seperti yang diduga?
伊谢尔伦2017-04-17 17:35:57
Panggil dahulu
import sys
sys.path
Semak sama ada lxml berada dalam laluan pemuatan sys.path
etree boleh dimuatkan secara berasingan
Anda mula-mula pastikan sama ada etree boleh dimuatkan secara normal
Cuba
1) PyRun_String
2) PyImport_ImportModule dan PySys_SetPath, yang kedua boleh menetapkan sys.path
3) Jika 1 atau 2 tidak berfungsi, anda mungkin perlu menukar lxml/html/__init , alih keluar penggunaan rujukan relatif di dalamnya