Python 程序无法在 LabVIEW 中正常运行,但可以自行运行
Python program don't work properly from LabVIEW, but works itself
我有一个 python 程序,它通过 scipy.optimize.differential_evolution(...) 进行了一些优化。如果我通过双击或 PyCharm(使用系统解释器,Python 3.6.8)启动它,我的 python 程序可以正常工作。但是,如果我尝试通过 Python 节点从 LabVIEW 2019(32 位)启动它,我会遇到 differential_evolution 方法的错误。问题出在 differential_evolution 方法中,因为当我关闭此方法时错误消失了。问题不可能在输入(来自 LabView)参数中,因为我现在不在我的函数中使用这些 LabView 参数。
我调用的函数显示在下面的代码片段中:
def make_in_labview()
#initialization of constants like bounds for optimization e. t. c.
...
# Main problem:
result = sp_opt.differential_evolution(func=myClass.deviation, bounds=optimization_bounds, args=[[empiric_set, funcs, False]],
strategy='best1bin', maxiter=10, tol=0.0001, popsize=30,
mutation=0.35, recombination=0.7, workers=2)
# (sp_opt - scipy.optimize)
return 0
这是 LabView 输出的主要错误:
函数名称:make_tomography
Python 返回以下错误:
模块 'sys' 没有属性 'argv'
这里是关于问题来源的看似无用的堆栈信息
*调用堆栈信息:
文件“C:\Users...\main.py”,第 3171 行,在 make_tomography 中
结果 = chip.optimization_diff_evolution(optimization_bounds, [empiric_set, funcs, False])
文件“C:\Users...\main.py”,第 564 行,在 optimization_diff_evolution
突变=0.35,重组=0.7,工人=2)
文件“C:\Users\QPrac\AppData\Local\Programs\Python\Python36-32\lib\site-packages\scipy\optimize_differentialevolution.py”,第 307 行,在 differential_evolution
约束=约束)作为求解器:
文件“C:\Users\QPrac\AppData\Local\Programs\Python\Python36-32\lib\site-packages\scipy\optimize_differentialevolution.py”,第 501 行,在 init 中
self._mapwrapper = MapWrapper(工人)
...
e.t.c。类似地或关于多处理像
文件“C:\Users\QPrac\AppData\Local\Programs\Python\Python36-32\Lib\multiprocessing\context.py”,第 119 行,在池中
上下文=self.get_context())*
你能帮我理解这个问题吗?
P.S。另外,我的 Windows 上只安装了 python 3.6.8., 32 位(因为它需要与 LabVIEW 32 位一起正常工作)。我的 Windows 是 64 位的,但我没有机会安装 LabVIEW 64 位。
问题已解决:如果您使用 LabView 的 python 节点,您应该准确检查如何将附加参数(即 'args' 根据 scipy 手册)传递给scipy.
的diff进化方法
我有一个 python 程序,它通过 scipy.optimize.differential_evolution(...) 进行了一些优化。如果我通过双击或 PyCharm(使用系统解释器,Python 3.6.8)启动它,我的 python 程序可以正常工作。但是,如果我尝试通过 Python 节点从 LabVIEW 2019(32 位)启动它,我会遇到 differential_evolution 方法的错误。问题出在 differential_evolution 方法中,因为当我关闭此方法时错误消失了。问题不可能在输入(来自 LabView)参数中,因为我现在不在我的函数中使用这些 LabView 参数。
我调用的函数显示在下面的代码片段中:
def make_in_labview()
#initialization of constants like bounds for optimization e. t. c.
...
# Main problem:
result = sp_opt.differential_evolution(func=myClass.deviation, bounds=optimization_bounds, args=[[empiric_set, funcs, False]],
strategy='best1bin', maxiter=10, tol=0.0001, popsize=30,
mutation=0.35, recombination=0.7, workers=2)
# (sp_opt - scipy.optimize)
return 0
这是 LabView 输出的主要错误:
函数名称:make_tomography
Python 返回以下错误:
这里是关于问题来源的看似无用的堆栈信息
*调用堆栈信息: 文件“C:\Users...\main.py”,第 3171 行,在 make_tomography 中 结果 = chip.optimization_diff_evolution(optimization_bounds, [empiric_set, funcs, False])
文件“C:\Users...\main.py”,第 564 行,在 optimization_diff_evolution 突变=0.35,重组=0.7,工人=2)
文件“C:\Users\QPrac\AppData\Local\Programs\Python\Python36-32\lib\site-packages\scipy\optimize_differentialevolution.py”,第 307 行,在 differential_evolution 约束=约束)作为求解器:
文件“C:\Users\QPrac\AppData\Local\Programs\Python\Python36-32\lib\site-packages\scipy\optimize_differentialevolution.py”,第 501 行,在 init 中 self._mapwrapper = MapWrapper(工人)
...
e.t.c。类似地或关于多处理像
文件“C:\Users\QPrac\AppData\Local\Programs\Python\Python36-32\Lib\multiprocessing\context.py”,第 119 行,在池中 上下文=self.get_context())*
你能帮我理解这个问题吗?
P.S。另外,我的 Windows 上只安装了 python 3.6.8., 32 位(因为它需要与 LabVIEW 32 位一起正常工作)。我的 Windows 是 64 位的,但我没有机会安装 LabVIEW 64 位。
问题已解决:如果您使用 LabView 的 python 节点,您应该准确检查如何将附加参数(即 'args' 根据 scipy 手册)传递给scipy.
的diff进化方法