Python可执行目录导入问题

2024-09-27 22:27:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在学习一门在线python课程,有一个问题我很难解决。我有一个如下布局的可执行目录

reader/
|--__main__.py
|--reader
   |--__init__.py
   |--reader.py
   |--compressed
      |--gzipped.py
      |--bzipped.py
      |--__init__.py

当我在顶层目录中没有这些模块时,我可以很好地导入并使用所有的功能。当我把它们放在顶层目录中,并用

python reader test.gz

我得到以下错误

AttributeError: module 'reader' has not attribute 'Reader'

main.py的代码是

import sys
import reader

r = reader.Reader(sys.argv[1])

try:
    print(r.read())
finally:
    r.close()

reader.py的代码是

import os

from reader.compressed import gzipped, bzipped

extension_map = {
    '.bz2': bzipped.opener,
    '.gz': gzipped.opener,
}

class Reader:
    def __init__(self, filename):
        extension = os.path.splitext(filename)[1]
        opener = extension_map.get(extension, open)
        self.f = opener(filename, 'rt')

    def close(self):
        self.f.close()

    def read(self):
        return self.f.read()

如果需要,我可以提供其余的文件。我用的是目前的Python分布。任何帮助或解释都将不胜感激


Tags: pyimportself目录closereadinitdef
2条回答

当您有多个名称相同的模块/模块时,通常可以将名称空间放入递归循环中。另外,Reader类是大写的

如上所述,尝试python reader.reader test.gz

在进行故障排除时,请尝试tab complete功能,以查看模块是否正确加载

在我看来,由于您的__init__.py文件,文件夹reader被视为python模块。因此,您的main.py代码尝试在文件夹级别查找类Reader,但您需要在reader.py中查找Reader。你能试着换衣服吗

r = reader.Reader(sys.argv[1])

r = reader.reader.Reader(sys.argv[1])

此外,还有许多名为reader的模块/文件/模块,例如类Reader位于reader/reader/reader.py。我会尽量避免这种情况,因为它会导致混乱

相关问题 更多 >

    热门问题