";导入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

";导入clr”;使用cx_freeze进行精细编译后发布

所以我最终成功了:

最后,pythonNET安装正确,但版本似乎不是最好的(不确定是不是最新的,还是不是正确的版本或位),所以我删除了python.NET的每个文件(我把副本粘贴在这里和那里,以确保它被看到),并下载了最新版本的.whl(这里)(这不是pip正在下载的版本)。

最终import clr成功了。。。

我希望这能帮助到你们中的一些人:)