2012-06-26 36 views
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所以我模块不能正确导入,但我不知道如何解决它。

回答

7
from Encode.Ffmpeg import Ffmpeg 
+0

并回答原因:您得到的错误表明Ffmpeg被视为由Ffmpeg.py文件表示的模块。你真的想要一个在该模块中的类。两个名字都是一样的,没有错,但可能会让人困惑。 – bcelary

+0

Python 3 stdlib通常使用* file/module *名称全部小写的约定(并且为了避免与大写的*类*名称混淆,只是为了避免这种混淆,如果采用这种方式,导入将会从'encode.ffmpeg导入Ffmpeg'。 –