3
所以我有一个main.py file
内/home/richard/projects/hello-python
目录:从定制包导入失败,Python中
import sys
sys.path.append('/home/richard/projects/hello-python')
from Encode import Ffmpeg
x = Ffmpeg()
x.encode()
我已经那么在/home/richard/projects/hello-python/Encode
目录中创建一个包:
__init__.py
Ffmpeg.py
初始化文件是空的。 Ffmpeg.py
文件包含:
class Ffmpeg(object):
i = 150
def __init__(self):
print "i am constructor"
def encode(self):
print "hello world"
现在我运行main.py
这样的脚本:
python main.py
我得到这样的输出:
[email protected]:~/projects/hello-python$ python main.py
Traceback (most recent call last):
File "main.py", line 5, in <module>
x = Ffmpeg()
TypeError: 'module' object is not callable
[email protected]:~/projects/hello-python$
我认为有一些问题,我sys.path
所以我模块不能正确导入,但我不知道如何解决它。
并回答原因:您得到的错误表明Ffmpeg被视为由Ffmpeg.py文件表示的模块。你真的想要一个在该模块中的类。两个名字都是一样的,没有错,但可能会让人困惑。 – bcelary
Python 3 stdlib通常使用* file/module *名称全部小写的约定(并且为了避免与大写的*类*名称混淆,只是为了避免这种混淆,如果采用这种方式,导入将会从'encode.ffmpeg导入Ffmpeg'。 –