【问题标题】:"import clr" issue after fine compilation with cx_freeze使用 cx_freeze 精细编译后出现“import clr”问题
【发布时间】:2015-11-11 08:50:51
【问题描述】:

我遇到了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-except,如下所示:

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,应用程序也会崩溃...这导致我有 2 个选项,

  • 要么我的try except 不好,然后为什么?
  • clr 确实存在问题,我需要帮助。

EDIT2:

我尝试导入来自.pyd 的其他模块,认为.exe 可能找不到它们,但我尝试过的所有import 都没有任何问题。

EDIT3:

所以!在查看其他帖子后,我发现还有其他方法可以导入 dll:例如使用 ctypes

问题是:我的 dll 在C# 中,显然ctypes 不能很好地支持导入...我遇到了像WindowsError: [Error -532462766] Windows Error 0xE0434352 这样的错误,这对我没有多大帮助,因为它似乎很笼统Windows 中的错误,但这让我想也许在导入 clr 时导致我的程序崩溃的事情是一样的。有谁知道这个错误可能与什么有关?

所以我又开始使用 .NET clr,但仍然没有运气

郑重声明:我已经尝试过 python 32 位和 64 位。这里有更多信息

#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

【问题讨论】:

  • 程序崩溃时显示什么错误信息?
  • 你试过except ImportError as e:吗? clr 模块是否正确安装?
  • 没有错误信息,只有“程序停止运行”,所以我做了一个日志,我想我会得到更多信息...
  • ImportError 并没有改变任何东西,仍然崩溃并且在 except 部分中没有输出
  • 是的,通常应该正确安装 pythonnet,因为我进行了升级(它已经是最新的)并且我尝试卸载它并重新安装它

标签: c# python .net cx-freeze python.net


【解决方案1】:

所以我最终成功了:

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

最终import clr 起作用了...

我希望这对你们中的一些人有所帮助:)

【讨论】:

  • 所以我猜你安装了 pythonnet-2.1.0.dev1
  • 我记得是的,我想是的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-24
  • 1970-01-01
相关资源
最近更新 更多