";导入clr”;使用cx_freeze进行精细编译后发布
本文关键字:编译 clr 导入 quot 使用 cx freeze | 更新日期: 2023-09-27 18:21:24
我的import clr
出现问题,导致我的小程序的.exe
崩溃。
以下是我在程序中使用的导入:
import sys
from matplotlib.figure import Figure
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
from PyQt4.QtGui import QApplication, QMainWindow
from PyQt4.Qt import QGridLayout, QWidget
import clr
executablePath = 'E:''PythonWS''MyDll'''
sys.path.append(executablePath)
clr.AddReference("MyDll")
import MyDll
基本上,由于cx_freeze,程序编译得很好,我得到了一个可执行文件,但当我用日志启动它时,它在import clr
出现时崩溃
我不知道该怎么做才能让它发挥作用,如果有人有想法的话?
编辑:我在import clr
周围添加了一个尝试,如下所示:
try:
logger.info('in try')
import clr
executablePath = 'E:''PythonWS''MyDll'''
sys.path.append(executablePath)
clr.AddReference("MyDll")
dllPath = clr.FindAssembly('MyDll')
import MyDll
ts = MyDll.TestSystem('127.0.0.1', '127.0.0.1')
print ts.mainBoard.isConnected()
except Exception as e:
logger.info("Unexpected error: {}".format(e))
但即使使用try
,应用程序也会崩溃。。。这让我有两个选择,
- 要么我的
try
except
不好,然后为什么 clr
确实有问题,我需要帮助
第2版:
我尝试从.pyd
导入其他模块,认为.exe
可能找不到它们,但我尝试的所有import
都完成了,没有任何问题。
第3版:
所以!在查看了其他帖子后,我发现还有其他导入dll的方法:例如使用ctypes
。
问题是:我的dll在C#
中,显然ctypes
不太支持导入。。。我遇到了像WindowsError: [Error -532462766] Windows Error 0xE0434352
这样的错误,这对我没有太大帮助,因为这似乎是windows中的一个非常常见的错误,但这让我觉得,在导入clr时,导致程序崩溃的原因可能也是一样的。。有人知道这个错误可能与什么有关吗?
所以我又回到了使用.NET clr
,但仍然没有运气
记录在案:我已经尝试过32位和64位的python。以下是的更多信息
#with python 32 bits
platform architecture: ('32bit', 'WindowsPE')
sys.platform: win32
os.name: nt
#with python 64 bits
platform architecture: ('64bit', 'WindowsPE')
sys.platform: win32
os.name: nt
所以我最终成功了:
最后,pythonNET安装正确,但版本似乎不是最好的(不确定是不是最新的,还是不是正确的版本或位),所以我删除了python.NET的每个文件(我把副本粘贴在这里和那里,以确保它被看到),并下载了最新版本的.whl
(这里)(这不是pip
正在下载的版本)。
最终import clr
成功了。。。
我希望这能帮助到你们中的一些人:)