【问题标题】:PyDev: Unresolved importPyDev:未解决的导入
【发布时间】:2014-04-23 07:29:12
【问题描述】:

我在 Eclipse 中使用 PyDev,并且我的 Python 项目有一个自定义源路径:src/main/python/。路径被添加到 PythonPath。

现在,我想使用库 pyMIR:https://github.com/jsawruk/pymir,它没有任何安装脚本。所以我下载了它并将它作为 Pydev 包直接包含在我的项目中,pyMIR 的完整路径是:src/main/python/music/pymir

在音乐包(src/main/python/music)中,现在我想使用该库并通过:from pymir import AudioFile 导入它。没有出现错误,所以找到了AudioFile类。

之后,我想通过以下方式读取音频文件:AudioFile.open(path),然后我收到错误“导入中的未定义变量:打开”。但是当我运行脚本时,它可以工作,没有错误发生。

此外,当我查看 pyMIR 包时,也有未解决的导入错误。例如:AudioFile 类中的from pymir import Frame 产生错误:“Unresolved import: Frame”,当我将其更改为from music.pymir import Frame 时,错误消失,但运行时出现错误:“type object 'Frame'没有属性“框架””。

  1. 我必须更改什么,另一个导入或如何包含 Pydev 包?

  2. 当我使用标准路径“src”创建新项目时,不会出现“未解决的重要”错误。 src/main/python 的区别在哪里?因为我把源文件夹的路径改成了src/main/python

提前致谢。

【问题讨论】:

    标签: python eclipse import pydev


    【解决方案1】:

    我尝试下载并安装 pymir 包。有一个适合我的项目结构:

    project/music/
    project/music/pymir/
    project/music/pymir/AudioFile
    project/music/pymir/...
    project/music/audio_files/01.wav
    project/music/test.py
    

    test.py:

    import numpy
    from pymir import AudioFile
    filename = "audio_files/01.wav"
    print "Opening File: " + filename
    audiofile = AudioFile.open(filename)
    frames = audiofile.frames(2048, numpy.hamming)
    print len(frames)
    

    如果我将“test.py”从“音乐”包中移出,我还没有找到让它工作的方法。项目结构敏感和棘手的原因是,在我看来,pymir 包的结构不是很好。例如,作者将模块名称设置为“Frame.py”,模块内部有一个类名为“Frame”。然后在“__init__.py”中,代码​​类似于“from Frame import Frame”。而在“AudioFile.py”中,代码​​是“from pymir import Frame”。我真的觉得现在的pymir的命名和结构是乱七八糟的。建议您谨慎使用此包

    【讨论】:

    • 好的,现在我已经将音乐包添加到了python路径:/src/main/python/music。然后错误在 pymir 类中消失。但是在我的课堂上,我在 /src/main/python/music/AudioFeatures.py 下使用 pyMIR,但导入未解决的错误仍然存​​在。还有sys.path.append('music').
    • 我以为你的结构是“/src/main/python/music/pymir/AudioFeatures.py”,不是吗?我的意思是把整个“pymir”​​放在“音乐”下面。然后附加 python 路径并尝试将其用作“从 pymir 导入 AudioFile”。有用吗?
    • pyMIR 的东西在 /src/main/python/music/pymir/ 中。使用 pyMIR 的代码在 "/src/main/python/music 中的上一层。我将路径 /src/main/python/music 添加到 PYTHONPATH 并使用 @ 987654324@,然后我收到错误“Undefined variable from import: open”。静态打开方法有问题吗?
    • 你能粘贴你的命令和错误信息吗?如果你调用“import pymir”​​会发生什么?
    • 在我使用 pyMIR (src/main/python/music) 的示例文件中:from pymir import AudioFile from pymir import SpectralFlux 然后使用 audiofile = AudioFile.open(path) 我收到错误“未定义的变量来自导入:打开”,但在运行时它可以工作。
    【解决方案2】:

    在基本文件夹位置添加 "__init__.py" 空文件,它可以工作

    【讨论】:

      【解决方案3】:
      1. 解压文件夹pymirsite-packages,确保路径像

        site-packages\pymir
        site-packages\pymir\AudioFile.py
        site-packages\pymir\Frame.py
        site-packages\pymir\...
        
      2. 评论文件内容__init__.py

        #from AudioFile import AudioFile
        #from Frame import Frame
        #from Spectrum import Spectrum
        
      3. 测试一下

        import numpy as np
        import matplotlib.pyplot as plt
        from pymir.AudioFile import AudioFile
        
        filename = '../wavs/cxy_6s_mono_16KHz.wav'
        audiofile = AudioFile.open(filename)
        
        plt.plot(audiofile)
        plt.show()
        
        frames = audiofile.frames(2048, np.hamming)
        print(len(frames))
        

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-02-04
        • 1970-01-01
        • 2011-11-09
        • 1970-01-01
        • 1970-01-01
        • 2011-06-05
        • 2012-12-25
        相关资源
        最近更新 更多