VPython 7.6.1报错NameError: name '__server' is not defined的解决求助
NameError: name '__server' is not defined的问题 我完全理解你的困扰——运行最基础的VPython代码却遇到这个奇怪的服务器未定义错误,而且常规方案都不管用。结合你的环境(Spyder + Anaconda Python3.7.6 + VPython7.6.1)和报错细节,这里有几个针对性的排查方向:
一、强制指定Tkinter后端并验证生效
虽然你提到已经切换到Tkinter,但可能设置没有正确生效,导致代码仍然尝试启动Web服务器(这就是__server变量的来源)。试试在代码开头明确指定后端:
from vpython import * # 强制使用Tkinter渲染后端 scene = canvas(backend='tk') box()
运行后如果弹出Tkinter窗口显示立方体,说明后端切换成功;如果还是报错,先验证Tkinter是否正常:
import tkinter root = tkinter.Tk() root.title("Test Tkinter") root.mainloop()
如果这个测试代码能弹出窗口,说明Tkinter没问题;如果不行,需要重新安装Anaconda时勾选Tkinter组件,或者单独安装tk包。
二、避开Spyder的IPython环境运行代码
Spyder的集成IPython环境有时候会和VPython的后端逻辑冲突。试试在Anaconda Prompt里激活你的环境,然后直接运行代码:
- 打开Anaconda Prompt,输入
conda activate 你的环境名(默认是base) - 切换到代码所在目录:
cd C:/Users/lponcin/Google Drive/simplex - 运行代码:
python code_orbito.py
如果在命令行环境下能正常运行,说明问题出在Spyder的配置上,可以尝试重置Spyder的设置:打开Spyder,点击Tools > Reset Spyder Settings,然后重启Spyder再试。
三、降级VPython到稳定版本
VPython 7.6.1可能存在和Python3.7/Spyder兼容的bug,试试降级到7.5.0版本(这个版本在Python3.7环境下比较稳定):
在Anaconda Prompt里运行:
pip uninstall vpython -y pip install vpython==7.5.0
安装完成后再运行你的测试代码,看看是否解决问题。
四、检查依赖包是否完整
报错里的__server是Flask服务器实例,说明代码走到了Web后端的分支,但Flask可能未安装或者版本不兼容。检查并安装兼容版本的Flask:
pip install flask==2.0.3
(2.0.x版本和Python3.7兼容性较好)
附上你提供的报错信息方便参考:
Python 3.7.6 (default, Jan 8 2020, 20:23:39) [MSC v.1916 64 bit (AMD64)]
Type "copyright", "credits" or "license" for more information.
IPython 7.12.0 -- An enhanced Interactive Python.
runfile('C:/Users/lponcin/Google Drive/simplex/code_orbito.py', wdir='C:/Users/lponcin/Google Drive/simplex')
Traceback (most recent call last):
File "C:\Users\lponcin\Google Drive\simplex\code_orbito.py", line 9, in
box()
File "C:\Users\lponcin\Anaconda3\lib\site-packages\vpython\vpython.py", line 1099, in init
super(box, self).setup(args)
File "C:\Users\lponcin\Anaconda3\lib\site-packages\vpython\vpython.py", line 579, in setup
super(standardAttributes, self).init()
File "C:\Users\lponcin\Anaconda3\lib\site-packages\vpython\vpython.py", line 236, in init
from .no_notebook import _
File "C:\Users\lponcin\Anaconda3\lib\site-packages\vpython\no_notebook.py", line 272, in
__w = threading.Thread(target=__server.serve_forever)
NameError: name '__server' is not defined
内容的提问来源于stack exchange,提问作者Loïc Poncin

