【问题标题】:when running gekko for 1st time, got this error "cannot import name 'dump_csp_header' from werkzeug.http'第一次运行 gekko 时,出现此错误“无法从 werkzeug.http 导入名称 'dump_csp_header'
【发布时间】:2020-04-03 04:13:42
【问题描述】:

我正在使用 Spyder 运行我安装了 gekko 的 Python 3.7。但是,我尝试从 Wikipedia 运行一个简单的 gekko 代码,它给了我以下错误:

ImportError: cannot import name 'dump_csp_header' from 'werkzeug.http' (C:\Users\zulfan.adiputra\AppData\Local\Continuum\anaconda3\envs\PythonNew\lib\site-packages\werkzeug\http.py )

当我检查 Anaconda 提示时,安装的 werkzeug 是 1.0.0。这方面该怎么做?

谢谢

【问题讨论】:

  • 欢迎堆栈溢出。您能否发布您尝试运行的示例脚本和pip list 的输出?这应该可以帮助我们找出哪里出了问题。
  • 您是否在m.solve 中使用了GUI=True?据我所知,这是该软件包使用 werkzeug 的唯一地方。 GUI 功能目前可能有些不稳定,具体取决于您要执行的操作。

标签: python-3.x spyder werkzeug gekko


【解决方案1】:

您可以通过以下方式解决错误:

  1. m.solve() 中设置GUI=False
  2. 使用python myProgram.py 从命令行运行 Python 程序。如果您尝试通过从 Spyder 或 IDLE 等 IDE 运行来使用 GUI,Flask 服务器有时会出现问题。

不使用GUI 选项,使用matplotlib 绘制结果相对容易。这是一个示例脚本:

from gekko import GEKKO
import numpy as np
import matplotlib.pyplot as plt

m = GEKKO()  # initialize gekko
nt = 101
m.time = np.linspace(0, 2, nt)
# Variables
x1 = m.Var(value=1)
x2 = m.Var(value=0)
u = m.Var(value=0, lb=-1, ub=1)
p = np.zeros(nt)  # mark final time point
p[-1] = 1.0
final = m.Param(value=p)
# Equations
m.Equation(x1.dt() == u)
m.Equation(x2.dt() == 0.5 * x1 ** 2)
m.Obj(x2 * final)  # Objective function
m.options.IMODE = 6  # optimal control mode
m.solve()  # solve
plt.figure(1)  # plot results
plt.plot(m.time, x1.value, "k-", label=r"$x_1$")
plt.plot(m.time, x2.value, "b-", label=r"$x_2$")
plt.plot(m.time, u.value, "r--", label=r"$u$")
plt.legend(loc="best")
plt.xlabel("Time")
plt.ylabel("Value")
plt.show()

【讨论】:

  • 嗨,丹尼尔和约翰,
猜你喜欢
  • 2021-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-21
  • 2021-01-09
  • 1970-01-01
  • 2020-09-10
  • 2019-08-15
相关资源
最近更新 更多