我想使用VPython构建物理模拟。虽然,VPython在像trinket这样的网站上工作得很好。我想使用一个比web更好的IDE,我想使用真正的python模块以及外部库,如numpy。
我按照https://vpython.org/presentation2018/install.html上的说明在本地安装VPython。我使用命令pip install vpython
(不太喜欢conda
)并编写了这个简单的演示程序:
from vpython import sphere
sphere()
当我从命令行运行这个程序时,程序确实工作了:打开了一个浏览器窗口,显示球体。但是,这个设置有几个问题:
- 查看控制台时,它一直抛出一个奇怪的错误
RuntimeError: can't register atexit after shutdown
。但是,它似乎仍然运行良好。 - 我找不到一个方法来很好地停止模拟。关闭浏览器选项卡不会退出程序。按下
Ctrl+C
也没有任何用处。停止它的唯一方法是使用Ctrl+Break
,这是一个非常肮脏的方式,在我看来。我试图使用stop_server
在该链接中记录,但没有结果。
是否有办法解决这些问题,或者可能是一个不同的环境,将满足我的需求?我真的希望能够使用内置的python模块和外部库,如numpy,但目前似乎不可能。
根据本次讨论,这是Python版本的问题。
关于vpython
版本和使用的python
解释器之间不匹配的讨论:
我们落后了7.6.1的构建是针对Python 3.6、3.7和3.8完成的,而不是3.9。所以如果你降级Python,它可能会起作用。布鲁斯
你是正确的,谢谢!我降级到3.8.6,它工作了。
要退出程序,需要输入exit命令停止终端。
当使用递归函数创建形状时,我得到了相同的错误。当vpython退出时,递归线程仍在运行。
你可以通过在设置好场景并绘制好图形后添加这些行来防止vpython服务器关闭,直到你退出程序:
while True:
rate(60)
这将保持与vpython服务器的连接,只要程序正在运行(while True
),并将帧率设置为60fps (rate(60)
)
这来自于vpython文档中关于从终端运行vpython实例的注释:
从终端运行时,如果程序不以循环结束如果包含rate()语句,则需要添加"而True: rate(30)"到节目的最后。当从如Jupyter notebook、IDLE或Spyder等环境。
https://vpython.org/presentation2018/install.html