2012-06-26 112 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'。 –