用pycharm写Rhino的python填坑记录1

Q·1

from cgi import escape

ImportError: cannot import name 'escape' from 'cgi' (C:\Users\manu_\.conda\envs\STUDENT\lib\cgi.py)

在 Python 3.8 及更高版本中,cgi.escape 已被移除。如果你的代码依赖于 cgi.escape,你需要更新它以使用 html.escape,这是 Python 标准库中提供的用于替换 cgi.escape 的函数。

Solution:

查找并替换:在你的代码中找到所有 from cgi import escape 并替换为 from html import escape。

运行代码:修改完成后,重新运行你的代码,确保没有其他兼容性问题。

Q2:

import urlparse

ModuleNotFoundError: No module named 'urlparse' python-BaseException

在 Python 3 中,urlparse 模块被重命名为 urllib.parse。如果你的代码是从 Python 2 迁移过来的,你需要将 urlparse 替换为 urllib.parse。

Solution:

将你的代码中的 import urlparse 替换为 from urllib import parse as urlparse

from urllib import parse

Q3:

    from .response import Response

  File "C:\Users\manu_\.conda\envs\STUDENT\lib\site-packages\rhino\response.py", line 8, in <module>

    from Cookie import SimpleCookie

ModuleNotFoundError: No module named 'Cookie'

在 Python 3 中,Cookie 模块已被重命名为 http.cookies。如果你的代码中有 from Cookie import SimpleCookie,你需要将其替换为 from http.cookies import SimpleCookie。

Solution:

将代码中的 from Cookie import SimpleCookie 替换为 from http.cookies import SimpleCookie。

Q4:

    from .request import Request

  File "C:\Users\manu_\.conda\envs\STUDENT\lib\site-packages\rhino\request.py", line 8, in <module>

    from StringIO import StringIO

ModuleNotFoundError: No module named 'StringIO'

在 Python 3 中,StringIO 模块被移到了 io 模块中。如果你的代码是从 Python 2 迁移过来的,你需要将 from StringIO import StringIO 替换为 from io import StringIO。

Solution:

将代码中的 from StringIO import StringIO 替换为 from io import StringIO。

Q5:

    from .urls import request_context, build_url

  File "C:\Users\manu_\.conda\envs\STUDENT\lib\site-packages\rhino\urls.py", line 6, in <module>

    string_types = (str, unicode)

NameError: name 'unicode' is not defined

在 Python 3 中,unicode 类型已经被移除,因为 Python 3 将所有字符串都视为 str 类型,而在 Python 2 中,str 和 unicode 是分开的类型。如果你的代码需要兼容 Python 2 和 Python 3,可以使用以下方法来处理这个问题:

Solution:

仅兼容 Python 3:如果你只需要兼容 Python 3,直接移除对 unicode 的检查。

兼容 Python 2 和 Python 3:如果需要兼容 Python 2 和 Python 3,可以使用 six 库,该库提供了兼容性层。

1,仅兼容 Python 3 的修改

将 string_types = (str, unicode) 修改为 string_types = (str,)。

2,兼容 Python 2 和 Python 3 的修改

pip install six

import six

# Use six.string_types for compatibility

string_types = six.string_types

Q6:

正如前述问题,在用python环境调用RHINO软件时,提供的大量代码和python包,显示已经过期或者不再适用,请问是如何造成的,改如何解决,对于python3.8版本,调用rhino7版本的犀牛软件,该如何实现

原因:

1, Python 版本兼容性问题:一些旧代码或包可能针对的是 Python 2.x,而 Python 3.x 具有一些不同的语法和库。

2, Rhino 和 Python 的版本不匹配:Rhino 的 Python API 或插件可能只支持特定的 Python 版本,升级或更改 Python 版本可能导致兼容性问题。

3, 过时的依赖:随着时间的推移,某些第三方包可能不再维护或更新,导致它们与新版本的 Python 或其他依赖项不兼容。

Solution:

升级代码以适应 Python 3.x:确保代码使用 Python 3.x 的语法和库。

使用适配器库:如 six 库,帮助兼容 Python 2 和 3。

安装 rhinoinside:

pip install rhinoinside

配置 Rhino.Inside.Python: 创建一个 Python 脚本来调用 Rhino 的功能。

pip list | grep six

如果没有显示 six 模块,请再次尝试安装。

4. 检查 Python 环境

确保你正在使用的 Python 环境与安装 six 模块的环境一致。显示当前使用的 Python 解释器路径。

Linux:  which python

Windows:where python

5. 确认 Rhino 安装路径

确保 rhinoinside 库正确加载了 Rhino 安装路径。你可以在 Rhino 安装目录中找到 Rhino.exe 或 Rhino.app,并确保它与代码中的路径匹配。

通过以上步骤,你应该能够解决 ModuleNotFoundError: No module named 'six' 的问题,并正确运行调用 Rhino 7 的 Python 代码。

Q8:

如何用python语句,打开本地的犀牛软件

使用 Python 打开本地安装的 Rhino 软件,可以通过调用操作系统的命令来实现。以下是如何在 Windows 和 macOS 系统中使用 Python 打开 Rhino 软件的示例代码。

在 Windows 系统中打开 Rhino

首先,确保你知道 Rhino 可执行文件(如 Rhino.exe)的路径。通常,默认安装路径类似于:

C:\Program Files\Rhino 7\System\Rhino.exe

然后,使用 Python 的 subprocess 模块来运行 Rhino:

import subprocess

import os

# 路径到 Rhino 可执行文件

rhino_path = r"C:\Program Files\Rhino 7\System\Rhino.exe"

# 确保路径存在

if os.path.exists(rhino_path):

    # 打开 Rhino 软件

    subprocess.Popen(rhino_path)

else:

    print(f"Rhino 可执行文件不存在: {rhino_path}")

在 macOS 系统中打开 Rhino

在 macOS 系统中,Rhino 应用程序通常位于 /Applications/ 目录下。你可以使用 subprocess 模块来打开 Rhino:

import subprocess

import os

# 路径到 Rhino 应用程序

rhino_path = "/Applications/Rhino 7.app/Contents/MacOS/Rhinoceros"

# 确保路径存在

if os.path.exists(rhino_path):

    # 打开 Rhino 软件

    subprocess.Popen(["open", "-a", rhino_path])

else:

    print(f"Rhino 应用程序不存在: {rhino_path}")

详细步骤

导入必要的模块:

subprocess 模块用于在 Python 中执行系统命令。

os 模块用于检查文件路径是否存在。

定义 Rhino 可执行文件的路径:

确保你使用的是正确的路径。如果 Rhino 安装在自定义路径中,请修改相应的路径。

检查路径是否存在:

使用 os.path.exists 来确保定义的路径存在。

打开 Rhino 软件:

使用 subprocess.Popen 在 Windows 系统中打开 Rhino。

使用 subprocess.Popen 和 open 命令在 macOS 系统中打开 Rhino。

通过这些步骤,你可以使用 Python 语句在本地打开 Rhino 软件。

Q8

在上述问题基础上,win系统下,如何在打开的犀牛软件中画一个边长为1的立方体

要在 Windows 系统下使用 Python 打开 Rhino 软件并在其中画一个边长为1的立方体,可以使用 rhinoinside 库来实现。rhinoinside 库允许你从外部应用程序(如 Python 脚本)控制 Rhino。

Q9:

from rhino.Geometry import Point3d, Box, Plane, Interval

import scriptcontext as sc

上述引用在python中显示cannot find reference GEOMETRY in init_.py

你的问题是 from rhino.Geometry import Point3d, Box, Plane, Interval 在 Python 环境中显示 cannot find reference GEOMETRY in __init__.py。这是因为你需要正确初始化 Rhino 的环境。

import rhinoinside

rhinoinside.load()

import System

import Rhino

from Rhino.Geometry import Point3d, Box, Plane, Interval

import scriptcontext as sc

Q10:

Traceback (most recent call last):

  File "<frozen importlib._bootstrap>", line 991, in _find_and_load

  File "<frozen importlib._bootstrap>", line 973, in _find_and_load_unlocked

ModuleNotFoundError: No module named 'scriptcontext'

python-BaseException

看起来 scriptcontext 模块在使用 rhinoinside 时未能正确加载。在 rhinoinside 环境中,通常不需要直接使用 scriptcontext,而是应该使用 Rhino.RhinoDoc 来处理文档。以下是修改后的代码,不使用 scriptcontext,而是直接操作 Rhino 文档:

Q12:

in execfile

    exec(compile(contents+"\n", file, 'exec'), glob, loc)

  File "D:/OYSOS/main0.py", line 44, in <module>

    Rhino.Runtime.HostUtils.DisplayOleAlerts = False

AttributeError: attribute is read-only

python-BaseException

Rhino.Runtime.HostUtils.DisplayOleAlerts 属性是只读的,这导致了你遇到的 AttributeError。我们可以忽略这个设置,并继续处理 Rhino 环境初始化和文档操作。

Q13:

以上内容报错in execfile

    exec(compile(contents+"\n", file, 'exec'), glob, loc)

  File "D:/OYSOS/main0.py", line 48, in <module>

    doc = Rhino.RhinoDoc.CreateHeadless("", True)

TypeError: No method matches given arguments for RhinoDoc.CreateHeadless: (<class 'str'>, <class 'bool'>)

python-BaseException

看起来在 Rhino 7 和 RhinoInside 的环境中,Rhino.RhinoDoc.CreateHeadless 方法的参数要求略有变化。在最新的 Rhino 7 和 RhinoInside 中,应该使用以下方式创建一个无界面的 Rhino 文档:

Q14:

以上内容运行报错in execfile

    exec(compile(contents+"\n", file, 'exec'), glob, loc)

  File "D:/OYSOS/main0.py", line 29, in <module>

    doc = Rhino.RhinoDoc.Create()

TypeError: No method matches given arguments for RhinoDoc.Create: ()

关于使用 RhinoInside 创建无界面文档的最新方法,可以参考以下代码:

确保 RhinoInside 和 Rhino 库已经正确安装。

使用 RhinoApp.Initialized 进行初始化。

创建一个新的 Rhino 文档并设置为活动文档。

Q15:

from .resource import Resource

  File "C:\Users\manu_\.conda\envs\STUDENT\lib\site-packages\rhino\resource.py", line 18, in <module>

    class_types = (type, types.ClassType)  # new-style and old-style classes

AttributeError: module 'types' has no attribute 'ClassType'

这个报错表明代码中尝试使用了已经被移除的 types.ClassType,在 Python 3 中已经不再存在这个属性。types.ClassType 用于旧式类(old-style classes),而 Python 3 只支持新式类(new-style classes)。

Solution:

1,移除旧式类的支持

如果你的代码可以完全迁移到新式类,可以考虑移除对旧式类的支持。在现代 Python 中,推荐使用新式类,它们提供了更多功能和更好的性能。

2,更新类定义:将 class_types = (type, types.ClassType) 修改为 class_types = (type,)。这样可以确保代码只依赖于新式类。

3,检查依赖和库的更新:

确保你使用的 Rhino 和 RhinoInside 版本已经更新到支持 Python 3,并且没有依赖于旧式类的部分。

4,查看文档和社区支持:

查阅 Rhino 和 RhinoInside 的官方文档,以及相关的社区和支持论坛,看看是否有关于迁移和兼容性的建议或更新。

Q16:

Traceback (most recent call last):

  File "<frozen importlib._bootstrap>", line 991, in _find_and_load

  File "<frozen importlib._bootstrap>", line 973, in _find_and_load_unlocked

ModuleNotFoundError: No module named 'rhino.Geometry'

python-BaseException

报错表明在尝试导入 rhino.Geometry 模块时失败了。这通常是由于 rhinoinside 没有正确加载或模块路径问题。

确保你已经安装了 rhinoinside:

pip install rhinoinside

import rhinoinside

rhinoinside.load()  # 加载 RhinoInside

import System

import Rhino

from Rhino.Geometry import Point3d, Box, Plane, Interval

确保将 Rhino 安装目录添加到你的系统 PATH 环境变量中。

两种方法

1,在 Windows 上:

  1. 右键点击 “此电脑” -> “属性” -> “高级系统设置” -> “环境变量”
  2. 在 “系统变量” 中找到 PYTHONPATH,如果没有则新建一个
  3. 添加 Rhino 的 System 文件夹路径,例如 C:\Program Files\Rhino 7\System

2,代码中添加

os.environ['PATH'] += ';C:\\Program Files\\Rhino 7\\System'  # 根据实际安装路径调整

Q17

以上报错    rhinoinside.load()

  File"C:\Users\manu_\.conda\envs\STUDENT\lib\site-packages\rhinoinside\__init__.py", line 43, in load

    __rhino_core = Rhino.Runtime.InProcess.RhinoCore()

System.Runtime.InteropServices.COMException:  (0x80004005): 对 COM 组件的调用返回了错误 HRESULT E_FAIL。

   在 Rhino.Runtime.InProcess.RhinoCore.InternalStartup(Int32 argc, String[] argv, StartupInfo& info, IntPtr hostWnd)

   在 Rhino.Runtime.InProcess.RhinoCore..ctor(String[] args, WindowStyle windowStyle, IntPtr hostWnd)

python-BaseException

该错误 System.Runtime.InteropServices.COMException: (0x80004005): 对 COM 组件的调用返回了错误 HRESULT E_FAIL。 表明在尝试启动 Rhino 时遇到了问题。这个问题可能由多种原因引起,例如 Rhino 未正确安装,环境变量未正确配置,或权限问题。

Solution

# 添加 Rhino 安装目录到系统 PATH

rhino_path = r"C:\Program Files\Rhino 7\System"  # 根据实际安装路径调整

os.environ['PATH'] += f";{rhino_path}"

3. 以管理员身份运行

有时权限问题可能导致此错误。尝试以管理员身份运行你的 Python 环境。

4. 检查 Rhino 许可

确保你的 Rhino 许可是有效的。可以打开 Rhino 并确认许可状态。

5. 更新 Rhino 和 RhinoInside

确保你安装的是 Rhino 7 的最新版本,并且 rhinoinside 库也是最新版本。

pip install --upgrade rhinoinside

6. 检查 RhinoInside 安装

确认 RhinoInside 安装正确。你可以尝试重新安装:

pip uninstall rhinoinside

pip install rhinoinside

7. 尝试最小化的 RhinoInside 示例

运行一个最小化的 RhinoInside 示例,以确认基本功能是否正常:

import rhinoinside

rhinoinside.load()

import Rhino

print("Rhino version: ", Rhino.RhinoApp.Version)

Q18

运行报错The above exception was the direct cause of the following exception:

Traceback (most recent call last):

  File "C:\Program Files\JetBrains\PyCharm Community Edition 2021.1.1\plugins\python-ce\helpers\pydev\pydevd.py", line 1483, in _exec

    pydev_imports.execfile(file, globals, locals)  # execute the script

  File "C:\Program Files\JetBrains\PyCharm Community Edition 2021.1.1\plugins\python-ce\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile

    exec(compile(contents+"\n", file, 'exec'), glob, loc)

  File "D:/OYSOS/main0.py", line 62, in <module>

    doc.WriteFile(doc_path, True)

TypeError: No method matches given arguments for RhinoDoc.WriteFile: (<class 'str'>, <class 'bool'>)

python-BaseException

看起来 RhinoDoc.WriteFile 方法的参数类型不匹配。要解决这个问题,需要确保传递给 WriteFile 方法的参数类型正确。

在 RhinoCommon API 中,RhinoDoc.WriteFile 方法的签名应该类似如下:

WriteFile(self: RhinoDoc, path: str, version: int, geometry_only: bool, silent: bool) -> bool

在这个方法中,参数 path 是文件路径,version 是文件版本,geometry_only 和 silent 是布尔值。

确保你的 WriteFile 调用传递正确的参数类型和数量。例如,如果你只想保存文件,通常可以使用以下方式:

doc_path = "C:\\path_to_save_your_document\\test.3dm"

success = doc.WriteFile(doc_path, 6, False, True)  # 6表示保存为Rhino 6格式,可以根据需要调整

下面是一个修正后的完整示例:

# 保存文档

doc_path = "C:\\path_to_save_your_document\\test.3dm"

# 使用 Rhino 6 版本保存文档,geometry_only=False, silent=True

success = doc.WriteFile(doc_path, 6, False, True)

if success:

    print(f"Rhino document saved to: {doc_path}")

else:

    print("Failed to save Rhino document")

doc.Dispose()

Q19上述代码依然报错如下:18, in execfile

    exec(compile(contents+"\n", file, 'exec'), glob, loc)

  File "D:/OYSOS/main0.py", line 62, in <module>

    success = doc.WriteFile(doc_path, 7, False, True)

TypeError: No method matches given arguments for RhinoDoc.WriteFile: (<class 'str'>, <class 'int'>, <class 'bool'>, <class 'bool'>)

python-BaseException Process finished with exit code -1请问如何解决

报错信息表明传递给 RhinoDoc.WriteFile 方法的参数类型和数量不匹配。在 RhinoInside 中,可能有多个重载的 WriteFile 方法,你可以参考 RhinoCommon 的文档或尝试其他参数组合。

检查 WriteFile 方法的重载

首先,请确认 RhinoDoc.WriteFile 方法的参数类型和数量。你可以通过查阅 RhinoCommon API 文档或尝试不同的参数组合来解决问题。以下是一些常见的 WriteFile 方法重载:

bool WriteFile(self: RhinoDoc, str, FileWriteOptions)

bool WriteFile(self: RhinoDoc, str, int, bool, bool)

使用 FileWriteOptions

你可以尝试使用 FileWriteOptions 作为参数:

# 使用 FileWriteOptions 保存文档

doc_path = "C:\\path_to_save_your_document\\test.3dm"

options = Rhino.FileIO.FileWriteOptions()

options.WriteGeometryOnly = False

options.SuppressAllDialogs = True

# 保存文档

success = doc.WriteFile(doc_path, options)

if success:

    print(f"Rhino document saved to: {doc_path}")

else:

    print("Failed to save Rhino document")

doc.Dispose()

在这个示例中,我们:

使用 FileWriteOptions 作为参数,以确保提供正确的参数类型。

设置了 WriteGeometryOnly 和 SuppressAllDialogs 选项。

使用不同的参数组合

如果上述方法仍然无法解决问题,可以尝试其他参数组合:

# 尝试使用不同的参数组合

success = doc.WriteFile(doc_path, 6, True, False)

如果问题仍然存在,请检查你所使用的 Rhino 和 RhinoInside 版本,并确保所有库和环境变量正确配置。你也可以参考 RhinoCommon API 文档获取更多信息。

Q20

success = doc.WriteFile(doc_path, 6, True, False)

该保存文件的命令并不正确,请再次确认,在rhino文档中进行操作后,进行文件的保存,到底是什么命令,请务必确保提供信息的准确性

我理解你的需求,下面是一个修正后的示例,确保按照正确的 RhinoCommon API 来保存文档。

使用 RhinoCommon API 保存文档

首先,确保你安装的 rhinoinside 和 Rhino 版本是最新的。以下是一个示例代码,使用 RhinoCommon API 来创建并保存一个 3dm 文件:

# 使用 FileWriteOptions 保存文档

doc_path = "C:\\path_to_save_your_document\\test.3dm"

options = Rhino.FileIO.FileWriteOptions()

options.WriteGeometryOnly = False

options.SuppressAllDialogs = True

# 保存文档

success = doc.Write3dmFile(doc_path, options)

if success:

    print(f"Rhino document saved to: {doc_path}")

else:

    print("Failed to save Rhino document")

# 释放文档

doc.Dispose()

解释

定义和创建几何体:定义一个立方体并添加到文档中。

设置文件保存选项:使用 FileWriteOptions 设置文件保存选项。

保存文档:使用 Write3dmFile 方法保存文档到指定路径。

注意事项

路径和权限:确保文件路径是有效的,并且 Python 进程具有写入该路径的权限。

Rhino 版本:确保你使用的 Rhino 版本与 rhinoinside 兼容。

如果仍然有问题,请确保你的 Rhino 和 rhinoinside 版本都是最新的,并检查环境变量是否正确设置。如果问题依旧存在,请提供具体的错误信息,以便进一步诊断问题。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值