PyDev:未解决的导入

时间:2014-04-23 07:29:12

标签: python eclipse import pydev

我在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对象'Frame'没有属性'Frame'“。

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

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

  3. 提前致谢。

3 个答案:

答案 0 :(得分: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'从'music'包中移出,我还没有办法让它工作。在我看来,项目结构敏感而棘手的原因是pymir包的结构不合理。例如,作者将模块名称设置为“Frame.py”,并在模块内部将类命名为“Frame”。然后在“__init__.py”中,代码​​类似于“来自帧导入帧”。在“AudioFile.py”中,代码​​是“来自pymir import Frame”。我真的认为当前pymir的命名和结构很混乱。建议您仔细使用此包

答案 1 :(得分:0)

在基本文件夹位置添加" __ init __。py" 空文件并且可以正常工作

答案 2 :(得分:0)

  1. 将文件夹pymir解压缩到site-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))