kk_y 2024-08-14 17:18 采纳率: 23.1%
浏览 122
已结题

jetson xavier nx上安装python依赖包av时报错:Cython.Compiler.Errors.CompileError: av/logging.pyx

#jetson xavier nx上安装python依赖包av时报错:Cython.Compiler.Errors.CompileError: av/logging.pyx
安装命令是:pip install av,具体报错如下:

ERROR: Command errored out with exit status 1:
   command: /usr/bin/python3 /home/nvidia/.local/lib/python3.6/site-packages/pip/_vendor/pep517/in_process/_in_process.py build_wheel /tmp/tmpoc2ad4rd
       cwd: /tmp/pip-install-86e13fah/av_c2a66e23fe1649c7a13e21b53c3541ce
  Complete output (150 lines):
  running bdist_wheel
  running build
  running build_py
  creating build
  creating build/lib.linux-aarch64-3.6
  creating build/lib.linux-aarch64-3.6/av
  copying av/about.py -> build/lib.linux-aarch64-3.6/av
  copying av/deprecation.py -> build/lib.linux-aarch64-3.6/av
  copying av/__init__.py -> build/lib.linux-aarch64-3.6/av
  copying av/__main__.py -> build/lib.linux-aarch64-3.6/av
  copying av/datasets.py -> build/lib.linux-aarch64-3.6/av
  creating build/lib.linux-aarch64-3.6/av/video
  copying av/video/__init__.py -> build/lib.linux-aarch64-3.6/av/video
  creating build/lib.linux-aarch64-3.6/av/subtitles
  copying av/subtitles/__init__.py -> build/lib.linux-aarch64-3.6/av/subtitles
  creating build/lib.linux-aarch64-3.6/av/data
  copying av/data/__init__.py -> build/lib.linux-aarch64-3.6/av/data
  creating build/lib.linux-aarch64-3.6/av/filter
  copying av/filter/__init__.py -> build/lib.linux-aarch64-3.6/av/filter
  creating build/lib.linux-aarch64-3.6/av/sidedata
  copying av/sidedata/__init__.py -> build/lib.linux-aarch64-3.6/av/sidedata
  creating build/lib.linux-aarch64-3.6/av/codec
  copying av/codec/__init__.py -> build/lib.linux-aarch64-3.6/av/codec
  creating build/lib.linux-aarch64-3.6/av/container
  copying av/container/__init__.py -> build/lib.linux-aarch64-3.6/av/container
  creating build/lib.linux-aarch64-3.6/av/audio
  copying av/audio/__init__.py -> build/lib.linux-aarch64-3.6/av/audio
  running build_ext
  running config
  PyAV: 9.0.1
  Python: 3.6.9 (default, Mar 10 2023, 16:46:00)
  [GCC 8.4.0]
  platform: Linux-4.9.253-tegra-aarch64-with-Ubuntu-18.04-bionic
  extension_extra:
      include_dirs: ['include', '/usr/include/aarch64-linux-gnu']
      libraries: ['avformat', 'avcodec', 'avdevice', 'avutil', 'avfilter', 'swscale', 'swresample']
      library_dirs: []
      define_macros: []
      runtime_library_dirs: []
  running cythonize
  Compiling av/enum.pyx because it changed.
  [1/1] Cythonizing av/enum.pyx
  Compiling av/error.pyx because it changed.
  [1/1] Cythonizing av/error.pyx
  Compiling av/buffer.pyx because it changed.
  [1/1] Cythonizing av/buffer.pyx
  Compiling av/option.pyx because it changed.
  [1/1] Cythonizing av/option.pyx
  Compiling av/_core.pyx because it changed.
  [1/1] Cythonizing av/_core.pyx
  Compiling av/descriptor.pyx because it changed.
  [1/1] Cythonizing av/descriptor.pyx
  Compiling av/utils.pyx because it changed.
  [1/1] Cythonizing av/utils.pyx
  Compiling av/dictionary.pyx because it changed.
  [1/1] Cythonizing av/dictionary.pyx
  Compiling av/bytesource.pyx because it changed.
  [1/1] Cythonizing av/bytesource.pyx
  Compiling av/stream.pyx because it changed.
  [1/1] Cythonizing av/stream.pyx
  Compiling av/packet.pyx because it changed.
  [1/1] Cythonizing av/packet.pyx
  Compiling av/format.pyx because it changed.
  [1/1] Cythonizing av/format.pyx
  Compiling av/frame.pyx because it changed.
  [1/1] Cythonizing av/frame.pyx
  performance hint: av/logging.pyx:242:5: Exception check on 'log_callback' will always require the GIL to be acquired.
  Possible solutions:
      1. Declare 'log_callback' as 'noexcept' if you control the definition and you're sure you don't want the function to raise exceptions.
      2. Use an 'int' return type on 'log_callback' to allow an error code to be returned.
  
  Error compiling Cython file:
  ------------------------------------------------------------
  ...
  cdef const char *log_context_name(void *ptr) nogil:
      cdef log_context *obj = <log_context*>ptr
      return obj.name
  
  cdef lib.AVClass log_class
  log_class.item_name = log_context_name
                        ^
  ------------------------------------------------------------
  
  av/logging.pyx:226:22: Cannot assign type 'const char *(void *) except? NULL nogil' to 'const char *(*)(void *) noexcept nogil'. Exception values are incompatible. Suggest adding 'noexcept' to the type of 'log_context_name'.
  
  Error compiling Cython file:
  ------------------------------------------------------------
  ...
  
  # Start the magic!
  # We allow the user to fully disable the logging system as it will not play
  # nicely with subinterpreters due to FFmpeg-created threads.
  if os.environ.get('PYAV_LOGGING') != 'off':
      lib.av_log_set_callback(log_callback)
                              ^
  ------------------------------------------------------------
  
  av/logging.pyx:361:28: Cannot assign type 'void (void *, int, const char *, va_list) except * nogil' to 'av_log_callback' (alias of 'void (*)(void *, int, const char *, va_list) noexcept nogil'). Exception values are incompatible. Suggest adding 'noexcept' to the type of 'log_callback'.
  Compiling av/logging.pyx because it changed.
  [1/1] Cythonizing av/logging.pyx
  Traceback (most recent call last):
    File "/home/nvidia/.local/lib/python3.6/site-packages/pip/_vendor/pep517/in_process/_in_process.py", line 363, in <module>
      main()
    File "/home/nvidia/.local/lib/python3.6/site-packages/pip/_vendor/pep517/in_process/_in_process.py", line 345, in main
      json_out['return_val'] = hook(**hook_input['kwargs'])
    File "/home/nvidia/.local/lib/python3.6/site-packages/pip/_vendor/pep517/in_process/_in_process.py", line 262, in build_wheel
      metadata_directory)
    File "/tmp/pip-build-env-2yzij6j4/overlay/lib/python3.6/site-packages/setuptools/build_meta.py", line 231, in build_wheel
      wheel_directory, config_settings)
    File "/tmp/pip-build-env-2yzij6j4/overlay/lib/python3.6/site-packages/setuptools/build_meta.py", line 215, in _build_with_temp_dir
      self.run_setup()
    File "/tmp/pip-build-env-2yzij6j4/overlay/lib/python3.6/site-packages/setuptools/build_meta.py", line 268, in run_setup
      self).run_setup(setup_script=setup_script)
    File "/tmp/pip-build-env-2yzij6j4/overlay/lib/python3.6/site-packages/setuptools/build_meta.py", line 158, in run_setup
      exec(compile(code, __file__, 'exec'), locals())
    File "setup.py", line 348, in <module>
      "Topic :: Multimedia :: Video :: Conversion",
    File "/tmp/pip-build-env-2yzij6j4/overlay/lib/python3.6/site-packages/setuptools/__init__.py", line 153, in setup
      return distutils.core.setup(**attrs)
    File "/usr/lib/python3.6/distutils/core.py", line 148, in setup
      dist.run_commands()
    File "/usr/lib/python3.6/distutils/dist.py", line 955, in run_commands
      self.run_command(cmd)
    File "/usr/lib/python3.6/distutils/dist.py", line 974, in run_command
      cmd_obj.run()
    File "/tmp/pip-build-env-2yzij6j4/overlay/lib/python3.6/site-packages/wheel/bdist_wheel.py", line 299, in run
      self.run_command('build')
    File "/usr/lib/python3.6/distutils/cmd.py", line 313, in run_command
      self.distribution.run_command(command)
    File "/usr/lib/python3.6/distutils/dist.py", line 974, in run_command
      cmd_obj.run()
    File "/usr/lib/python3.6/distutils/command/build.py", line 135, in run
      self.run_command(cmd_name)
    File "/usr/lib/python3.6/distutils/cmd.py", line 313, in run_command
      self.distribution.run_command(command)
    File "/usr/lib/python3.6/distutils/dist.py", line 974, in run_command
      cmd_obj.run()
    File "setup.py", line 304, in run
      self.run_command("cythonize")
    File "/usr/lib/python3.6/distutils/cmd.py", line 313, in run_command
      self.distribution.run_command(command)
    File "/usr/lib/python3.6/distutils/dist.py", line 974, in run_command
      cmd_obj.run()
    File "setup.py", line 265, in run
      include_path=ext.include_dirs,
    File "/tmp/pip-build-env-2yzij6j4/overlay/lib/python3.6/site-packages/Cython/Build/Dependencies.py", line 1154, in cythonize
      cythonize_one(*args)
    File "/tmp/pip-build-env-2yzij6j4/overlay/lib/python3.6/site-packages/Cython/Build/Dependencies.py", line 1321, in cythonize_one
      raise CompileError(None, pyx_file)
  Cython.Compiler.Errors.CompileError: av/logging.pyx
  ----------------------------------------
  ERROR: Failed building wheel for av
Failed to build av
ERROR: Could not build wheels for av, which is required to install pyproject.toml-based projects
  • 写回答

1条回答 默认 最新

  • GISer Liu 2024-08-14 17:19
    关注

    该回答引用自GPT-deepseek, 由博主 GISer Liu 编写:

    问题分析

    根据报错信息,av包在安装过程中遇到了Cython编译错误。具体错误发生在av/logging.pyx文件中,主要是因为Cython编译器无法处理某些异常处理的代码。报错信息指出,log_context_namelog_callback函数需要添加noexcept声明,以确保它们不会抛出异常。

    解决方案

    为了解决这个问题,我们需要手动修改av/logging.pyx文件,添加noexcept声明。以下是具体步骤:

    1. 定位并修改av/logging.pyx文件

      • 找到av/logging.pyx文件。
      • 修改log_context_namelog_callback函数的声明,添加noexcept
    2. 重新安装av

      • 使用修改后的文件重新安装av包。

    具体操作步骤

    1. 修改av/logging.pyx文件

      • 打开av/logging.pyx文件。

      • 找到以下代码:

        cdef const char *log_context_name(void *ptr) nogil:
        

        修改为:

        cdef const char *log_context_name(void *ptr) nogil noexcept:
        
      • 找到以下代码:

        cdef void log_callback(void *ptr, int level, const char *fmt, va_list vl) nogil:
        

        修改为:

        cdef void log_callback(void *ptr, int level, const char *fmt, va_list vl) nogil noexcept:
        
    2. 重新安装av

      • 确保修改后的文件已经保存。
      • 使用以下命令重新安装av包:
        pip install av --no-binary :all:
        

    代码修改示例

    以下是修改后的av/logging.pyx文件的部分代码示例:

    cdef const char *log_context_name(void *ptr) nogil noexcept:
        cdef log_context *obj = <log_context*>ptr
        return obj.name
    
    cdef void log_callback(void *ptr, int level, const char *fmt, va_list vl) nogil noexcept:
        ...
    

    总结

    通过手动修改av/logging.pyx文件中的函数声明,添加noexcept声明,可以解决Cython编译错误,从而成功安装av包。希望以上解决方案能帮助您解决问题。如果还有其他问题,请随时联系。

    如果该回答解决了您的问题,请采纳!如果没有,请私信联系或评论您的疑惑

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月23日
  • 已采纳回答 8月15日
  • 创建了问题 8月14日