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)
来读取一个音频文件,但出现了错误“从导入中未定义的变量:open”。不过,当我运行脚本时,它是可以工作的,没有错误。
此外,当我查看pyMIR包时,也有未解决的导入错误。例如:在AudioFile类中,from pymir import Frame
会产生错误:“未解决的导入:Frame”,当我把它改成from music.pymir import Frame
时,错误消失了,但运行时又出现了错误:“类型对象'Frame'没有属性'Frame'”。
我需要更改什么,是否需要其他导入,或者如何包含一个Pydev包?
当我创建一个新的项目,使用标准路径“src”时,就没有“未解决的导入”错误。这和src/main/python有什么区别?因为我已经把源文件夹的路径改成了src/main/python。
提前谢谢你。
3 个回答
把文件夹
pymir
解压到site-packages
里,确保路径像下面这样site-packages\pymir site-packages\pymir\AudioFile.py site-packages\pymir\Frame.py site-packages\pymir\...
把文件
__init__.py
里的内容注释掉#from AudioFile import AudioFile #from Frame import Frame #from Spectrum import Spectrum
进行测试
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))
在基础文件夹里添加一个"__init__.py"的空文件,这样就能正常工作了。
我尝试下载并安装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在命名和结构上有点乱。建议你在使用这个包的时候要小心。