Rhino 8与Grasshopper:外部Python IDE中Rhino模块导入配置问题
Rhino 3D Python外部IDE配置问题
我用Rhino 3D和Grasshopper辅助工程师做Python编程,Python运行时自动安装在C:\Users\Patrick Bucher\.rhinocode\py39-rh8,脚本在Rhino集成Python编辑器里运行正常,但想改用Visual Studio Code、PyCharm这类外部IDE编写代码,并用PyTest执行测试。
创建虚拟环境
我基于现有环境创建了虚拟环境,执行命令:
'C:\Users\Patrick Bucher\.rhinocode\py39-rh8\python.exe' -m venv env --system-site-packages
注:使用--system-site-packages参数以包含系统站点包路径。
遇到的错误
但在这个虚拟环境里运行demo.py(代码如下)时失败:
import Rhino dir(Rhino)
报错信息:
> python .\demo.py Traceback (most recent call last): File "C:\Users\Patrick Bucher\solartables-constructable\demo.py", line 1, in <module> import Rhino ModuleNotFoundError: No module named 'Rhino'
对比sys.path排查问题
于是我在Grasshopper里运行以下脚本获取正确的sys.path:
import sys print(sys.path)
输出结果:
['C:\\Users\\Patrick Bucher\\.rhinocode\\py39-rh8\\site-envs\\default-kG+mgfz0', 'C:\\Users\\Patrick Bucher\\AppData\\Roaming\\McNeel\\Rhinoceros\\8.0\\scripts', 'C:\\Users\\Patrick Bucher\\.rhinocode\\py39-rh8\\site-rhinoghpython', 'C:\\Users\\Patrick Bucher\\.rhinocode\\py39-rh8\\site-rhinopython', 'C:\\Users\\Patrick Bucher\\.rhinocode\\py39-rh8\\site-interop', 'C:\\Users\\Patrick Bucher\\.rhinocode\\py39-rh8\\python39.zip', 'C:\\Users\\Patrick Bucher\\.rhinocode\\py39-rh8\\DLLs', 'C:\\Users\\Patrick Bucher\\.rhinocode\\py39-rh8\\lib', 'C:\\Program Files\\Rhino 8\\System', 'C:\\Users\\Patrick Bucher\\.rhinocode\\py39-rh8', 'C:\\Users\\Patrick Bucher\\.rhinocode\\py39-rh8\\lib\\site-packages', 'C:\\Program Files\\dotnet\\shared\\Microsoft.NETCore.App\\7.0.0\\']
我写了syspathdiff.py脚本对比外部IDE环境的sys.path:
import sys rhino = set(['C:\\Users\\Patrick Bucher\\.rhinocode\\py39-rh8\\site-envs\\default-kG+mgfz0', 'C:\\Users\\Patrick Bucher\\AppData\\Roaming\\McNeel\\Rhinoceros\\8.0\\scripts', 'C:\\Users\\Patrick Bucher\\.rhinocode\\py39-rh8\\site-rhinoghpython', 'C:\\Users\\Patrick Bucher\\.rhinocode\\py39-rh8\\site-rhinopython', 'C:\\Users\\Patrick Bucher\\.rhinocode\\py39-rh8\\site-interop', 'C:\\Users\\Patrick Bucher\\.rhinocode\\py39-rh8\\python39.zip', 'C:\\Users\\Patrick Bucher\\.rhinocode\\py39-rh8\\DLLs', 'C:\\Users\\Patrick Bucher\\.rhinocode\\py39-rh8\\lib', 'C:\\Program Files\\Rhino 8\\System', 'C:\\Users\\Patrick Bucher\\.rhinocode\\py39-rh8', 'C:\\Users\\Patrick Bucher\\.rhinocode\\py39-rh8\\lib\\site-packages', 'C:\\Program Files\\dotnet\\shared\\Microsoft.NETCore.App\\7.0.0\\']) actual = set(sys.path) missing = rhino - actual print(missing)
得到缺失的路径:
{'C:\\Program Files\\dotnet\\shared\\Microsoft.NETCore.App\\7.0.0\\', 'C:\\Program Files\\Rhino 8\\System', 'C:\\Users\\Patrick Bucher\\.rhinocode\\py39-rh8\\site-rhinoghpython', 'C:\\Users\\Patrick Bucher\\AppData\\Roaming\\McNeel\\Rhinoceros\\8.0\\scripts', 'C:\\Users\\Patrick Bucher\\.rhinocode\\py39-rh8\\site-interop', 'C:\\Users\\Patrick Bucher\\.rhinocode\\py39-rh8\\site-envs\\default-kG+mgfz0', 'C:\\Users\\Patrick Bucher\\.rhinocode\\py39-rh8\\site-rhinopython'}
我的问题
- 如何配置虚拟环境,让PyTest测试用例及其他涉及
Rhino模块的脚本能成功导入该模块? - 需要添加哪些额外路径,才能在Python代码中访问
Rhino模块?
补充说明
存在供CLR使用的RhinoCommon.dll,可通过pythonnet包(执行pip install pythonnet安装)导入:
try: import Rhino.Geometry as rg except ModuleNotFoundError: import clr rhino = clr.AddReference(r"C:\Program Files\Rhino 8\System\netcore\RhinoCommon.dll") print(rhino)
输出结果:
RhinoCommon, Version=8.6.24101.5001, Culture=neutral, PublicKeyToken=552281e97c755530
我不清楚如何在Python中使用该导入后的库,望得到相关提示。
内容的提问来源于stack exchange,提问作者Patrick Bucher
相关产品推荐
相关产品推荐

