2013-02-04 56 views
0

我很困惑。我認爲這將是一個簡單的錯誤,但我找不到我做錯了什麼。我正在運行Python 2.4.4。我寫了第一個由多個文件組成的第一個Python腳本。我讀過python查看當前工作目錄,以及用戶添加模塊的所有常用路徑。我已經在看sys.path中證實了這一點:在本地目錄中找不到模塊,存在於sys.path中

$ python 
Python 2.4.4 (#1, Jan 8 2013, 09:29:21) 
[GCC 4.7.2 20120921 (Red Hat 4.7.2-2)] on linux3 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import sys 
>>> print(sys.path) 
['', '/usr/local/lib/python24.zip', '/usr/local/lib/python2.4',  '/usr/local/lib/python2.4/plat-linux3', '/usr/local/lib/python2.4/lib-tk',  '/usr/local/lib/python2.4/lib-dynload', '/usr/local/lib/python2.4/site-packages'] 
>>> 

中的第一項,「」,表示期待在當前工作目錄,但它似乎並沒有被這樣做。這裏是我的mult文件python程序的內容。請注意,所有內容都在同一個目錄中:

$ ls 
cherwellTicket.py dsutils.py emailMessage.py 
$ 

這裏是dsutils.py的內容。此模塊包含我想在其他類中使用的各種靜態方法:

#!/usr/bin/python 

import getpass 
import socket 

class DSUtils: 
    # (I didn't paste the rest) 

這裏是cherwellTicket.py的內容。請注意,這是在同一個目錄:

#!/usr/bin/python 

import DSUtils 

class CherwellTicket: 

    def __init(): 
     pass 

然而,當Python改掉執行cherwellTicket.py,繼承人發生了什麼:

$ python cherwellTicket.py 
Traceback (most recent call last): 
    File "cherwellTicket.py", line 3, in ? 
    import DSUtils 
ImportError: No module named DSUtils 
$ 

這兩個文件都在同一個目錄,那麼爲什麼是cherwellTicket腳本現在可以導入dsutils類了嗎?

回答

4

DSUtils不同於dsutils。我想你可能想:

from dsutils import DSUtils 

模塊文件(SANS .py擴展)的名稱。在導入模塊之前,Python不會查看模塊中的類。

另外,

import dsutils 
class_you_want = dsutils.DSUtils 
+0

哦。謝謝!它被認爲是錯誤的形式來命名類不同於文件名?這是你可以做的事情之一,但它的粗魯的東西? – mystupidquestion

+0

使用CamelCase作爲類(pep-8)而不是'class_you_want'。此外,OP在Linux上,但在Windows和OS X上仍有PYTHONCASEOK envvar(不應該使用),請參見[導入不區分大小寫的平臺](http://www.python.org/dev/peps/ PEP-0235 /)。 – jfs

+0

@mystupidquestion:使用小寫模塊和[CapWords for classes](http://www.python.org/dev/peps/pep-0008/#class-names)。您可以在模塊中定義多個公共類。沒有必要使用相同的名稱。 – jfs

0

的模塊文件名命名的,而不是在模塊嘗試類:

from dsutils import DSUtils 
相關問題