Python Can';在本地目录中找不到模块,存在于sys.path中

Python Can';在本地目录中找不到模块,存在于sys.path中,python,Python,我很困惑。我认为这将是一个简单的错误,但我找不到我做错了什么。我正在运行python 2.4.4。我已经编写了由多个文件组成的第一个python脚本。我已经阅读了当前工作目录中的python外观,以及用户添加模块的所有常用路径。我通过查看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", "c

我很困惑。我认为这将是一个简单的错误,但我找不到我做错了什么。我正在运行python 2.4.4。我已经编写了由多个文件组成的第一个python脚本。我已经阅读了当前工作目录中的python外观,以及用户添加模块的所有常用路径。我通过查看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']
>>> 
第一个条目“”表示当前工作目录中的外观,但它似乎没有这样做。下面是我的多文件python程序的内容。注意,所有内容都在同一目录中:

$ ls
cherwellTicket.py  dsutils.py  emailMessage.py
$
#!/usr/bin/python

import DSUtils 

class CherwellTicket:

    def __init():
        pass
以下是dsutils.py的内容。此模块包含我想在其他类中使用的各种静态方法:

#!/usr/bin/python

import getpass
import socket

class DSUtils:
    # (I didn't paste the rest)
下面是cherwellTicket.py的内容。注意,这在同一目录中:

$ ls
cherwellTicket.py  dsutils.py  emailMessage.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类呢?

dsutils
dsutils
不同。我想你可能想要:

from dsutils import DSUtils
模块是文件名(sans
.py
扩展名)。在导入模块之前,Python不会查看模块中的类

或者

 import dsutils
 class_you_want = dsutils.DSUtils

DSUtils
DSUtils
不同。我想你可能想要:

from dsutils import DSUtils
模块是文件名(sans
.py
扩展名)。在导入模块之前,Python不会查看模块中的类

或者

 import dsutils
 class_you_want = dsutils.DSUtils

模块以文件名命名,而不是以模块中的类命名。请尝试:

from dsutils import DSUtils

模块以文件名命名,而不是以模块中的类命名。请尝试:

from dsutils import DSUtils

哦谢谢将类命名为不同于文件名是否被认为是不好的形式?这是你能做但却很粗鲁的事情之一吗?用CamelCase for class(pep-8)代替你想要的
class\u
。同样,OP在Linux上,但在Windows和OS X上仍然有PYTHONCASEOK envvar(不应使用),请参阅。@mystupidquestion:对模块和使用小写。您可以在一个模块中定义多个公共类。没有必要使用相同的名称。@J.F.Sebastian——关于类的大写词,您是绝对正确的。我只绑定了一个对另一个名称下的类的引用,以卸载OP想要的类在以这种方式导入时将被引用为
dsutils.dsutils
。谢谢将类命名为不同于文件名是否被认为是不好的形式?这是你能做但却很粗鲁的事情之一吗?用CamelCase for class(pep-8)代替你想要的
class\u
。同样,OP在Linux上,但在Windows和OS X上仍然有PYTHONCASEOK envvar(不应使用),请参阅。@mystupidquestion:对模块和使用小写。您可以在一个模块中定义多个公共类。没有必要使用相同的名称。@J.F.Sebastian——关于类的大写词,您是绝对正确的。我只绑定了一个对另一个名称下的类的引用,以解除对OP想要的类在以这种方式导入时将被引用为
dsutils.dsutils
的说明。