在sys.path中存在的模块无法在本地目录找到
我有点困惑。我觉得这应该是个简单的错误,但我找不到我哪里做错了。我正在使用 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
DSUtils
和 dsutils
是不一样的。你可能想要的是:
from dsutils import DSUtils
模块是指文件的名字(不包括 .py
后缀)。在 Python 中,只有在导入模块的时候,才会查看模块里面的类。
另外,
import dsutils
class_you_want = dsutils.DSUtils