PyDev: 未解决的导入

0 投票
3 回答
2136 浏览
提问于 2025-04-18 03:53

我在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)来读取一个音频文件,但出现了错误“从导入中未定义的变量:open”。不过,当我运行脚本时,它是可以工作的,没有错误。

此外,当我查看pyMIR包时,也有未解决的导入错误。例如:在AudioFile类中,from pymir import Frame会产生错误:“未解决的导入:Frame”,当我把它改成from music.pymir import Frame时,错误消失了,但运行时又出现了错误:“类型对象'Frame'没有属性'Frame'”。

  1. 我需要更改什么,是否需要其他导入,或者如何包含一个Pydev包?

  2. 当我创建一个新的项目,使用标准路径“src”时,就没有“未解决的导入”错误。这和src/main/python有什么区别?因为我已经把源文件夹的路径改成了src/main/python

提前谢谢你。

3 个回答

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))
    
0

在基础文件夹里添加一个"__init__.py"的空文件,这样就能正常工作了。

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”文件里,代码是“from Frame import Frame”。在“AudioFile.py”里,代码又是“from pymir import Frame”。我真的觉得现在的pymir在命名和结构上有点乱。建议你在使用这个包的时候要小心。

撰写回答