在sys.path中存在的模块无法在本地目录找到

0 投票
2 回答
2301 浏览
提问于 2025-04-17 14:44

我有点困惑。我觉得这应该是个简单的错误,但我找不到我哪里做错了。我正在使用 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
$

这是 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 类呢?

2 个回答

0

这个模块的名字是根据文件名来的,而不是模块里面的类名。你可以试试:

from dsutils import DSUtils
4

DSUtilsdsutils 是不一样的。你可能想要的是:

from dsutils import DSUtils

模块是指文件的名字(不包括 .py 后缀)。在 Python 中,只有在导入模块的时候,才会查看模块里面的类。

另外,

 import dsutils
 class_you_want = dsutils.DSUtils

撰写回答