无法使用 -OO 标志使用 astropy 运行代码

Can't run code with astropy using -OO flag

提问人:MatCat 提问时间:7/6/2023 更新时间:7/15/2023 访问量:52

问:

我的代码按预期在 python 中运行,没有 python 标志,或者带有 -O 标志。它不适用于 -OO 标志。我的代码使用 astropy。Astropy 是一个 python 包,包含多个子包并使用了第三方代码层。

我已将代码简化为重现错误的最简单方法。minimalTest.py 内容为:

import astropy.coordinates
print('hello world')

以下 2 个命令按预期工作(每个命令都打印“hello world”):

# python3 minimalTest.py
# python3 -O minimalTest.py

以下代码会生成错误:

# python3 -OO minimalTest.py
Traceback (most recent call last):
  File "/tmp/minimalTest.py", line 1, in <module>
    import astropy.coordinates
  File "/usr/local/lib/python3.9/site-packages/astropy/coordinates/__init__.py", line 13, in <module>
    from .builtin_frames import *
  File "/usr/local/lib/python3.9/site-packages/astropy/coordinates/builtin_frames/__init__.py", line 30, in <module>
    from .cirs import CIRS
  File "/usr/local/lib/python3.9/site-packages/astropy/coordinates/builtin_frames/cirs.py", line 8, in <module>
    from .utils import DEFAULT_OBSTIME, EARTH_CENTER
  File "/usr/local/lib/python3.9/site-packages/astropy/coordinates/builtin_frames/utils.py", line 16, in <module>
    from astropy.utils import iers
  File "/usr/local/lib/python3.9/site-packages/astropy/utils/iers/__init__.py", line 1, in <module>
    from .iers import *
  File "/usr/local/lib/python3.9/site-packages/astropy/utils/iers/iers.py", line 23, in <module>
    from astropy.table import MaskedColumn, QTable
  File "/usr/local/lib/python3.9/site-packages/astropy/table/__init__.py", line 118, in <module>
    import astropy.io.ascii.connect
  File "/usr/local/lib/python3.9/site-packages/astropy/io/ascii/__init__.py", line 8, in <module>
    from .basic import (
  File "/usr/local/lib/python3.9/site-packages/astropy/io/ascii/basic.py", line 44, in <module>
    class Basic(core.BaseReader):
  File "/usr/local/lib/python3.9/site-packages/astropy/io/ascii/core.py", line 1233, in __init__
    func.__doc__ += inspect.cleandoc(cls.__doc__).strip()
  File "/usr/local/lib/python3.9/inspect.py", line 632, in cleandoc
    lines = doc.expandtabs().split('\n')
AttributeError: 'NoneType' object has no attribute 'expandtabs'

我认为这个问题可能与几年前关闭的 https://github.com/astropy/astropy/issues/10361 有关。此问题与 ply(astropy 使用的第三方代码)如何处理文档字符串有关。

我已经在带有 Python 3.9.10 的 Centos7 和带有 Python 3.11.2 的 Windows10 上重现了这个问题。

蟒蛇 astropy

评论

0赞 Michael Butscher 7/6/2023
astropy 中的某些东西试图检索由于标志而被删除的文档字符串。-OO
0赞 MatCat 7/6/2023
@MichaelButscher我同意你的评估。知道如何允许我的代码使用 -OO 标志运行吗?
0赞 Michael Butscher 7/6/2023
不幸的是没有,但为什么使用而不是很重要?删除文档字符串似乎是唯一的区别。-OO-O
0赞 MatCat 7/6/2023
这只是一个更大项目的一小部分。较大的项目使用 Nuitka 进行编译,其行为就像在删除文档字符串一样。
0赞 Tom Aldcroft 7/6/2023
现在正在 github.com/astropy/astropy/issues/15028 跟踪此问题,感谢您@MatCat打开该问题。

答:

0赞 MatCat 7/15/2023 #1

Astropy 代码库已更新,添加了对 -OO 标志的支持。https://github.com/astropy/astropy/pull/15037

请注意,此更新没有修复 Astropy 和 Nuitka 之间的兼容性问题,但直接在他们的 github 页面上跟踪这个问题。