2013-11-22 41 views
0

我是python的新手。通過閱讀tutorial,我準備將一些共享代碼放在一個盒子上。餘檢查的路徑作爲這樣無法從定製包中導入共享的Python代碼

>>> import sys 
>>> print sys.path 

在那裏我看到/usr/lib/python2.6/site-packages。在這個目錄中有一個目錄yum,並在那裏有一個文件yumRepo.py。回到解釋,我可以運行

>>> from yum import yumRepo 

但是,如果我創建像這樣一個自定義封裝/模塊(注意,所有的其他文件的所有者是root,因此須藤這裏)

sudo mkdir /usr/lib/python2.6/site-packages/custom 
sudo touch /usr/lib/python2.6/site-packages/custom/custom.py 

custom.py

def testfunc(): 
    print('hello from custom module!') 

我不能導入它:

>>> from custom import custom 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ImportError: No module named hnav 

權限看起來大致相同百勝包,除此之外,我沒有_ 初始化 _.py腳本,但我真的需要嗎?我如何從這個共享位置導入代碼?

回答

1

是的,您需要在/usr/lib/python2.6/site-packages/custom中使用__init__.py文件,以使其成爲Python包。這是記錄在這裏:http://docs.python.org/2.7/tutorial/modules.html#packages

__init__.py文件都需要使Python視該 目錄爲一個包

另外,假如你自己不必在全系統site-packages目錄中,您可以將它們放在您的PYTHONPATH環境變量中引用的任何目錄中。

+0

謝謝,我一定已經看到了。 – quickshiftin

1

我發現python setup.py機制並不總是放置你的當前python安裝將在以後找到它們的模塊/包。舉例來說,如果你碰巧有模塊/包源保存在/usr/local/whatever,並/usr/local/lib/python/etc Python的sys.path的項目,setup.py可能反正放在/usr/local/lib/python/etc新安裝的文件。您可以通過指定一個--prefix選項,如避免這種情況:

sudo python setup.py install --prefix /usr 

而且,你必須檢查的權限,新安裝的文件和目錄的,特別是如果你使用sudo命令。通過爲新安裝的模塊設置適當的權限,簡單解決了我的導入問題。