Python - 可执行目录导入问题

时间:2017-08-15 16:54:21

标签: python directory executable

我正在通过在线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()

如果需要,我可以提供其余的文件。我正在使用目前的Anaconda分销。任何帮助或解释将不胜感激。

2 个答案:

答案 0 :(得分:0)

在我看来,由于您的__init__.py文件,文件夹reader被视为python模块。因此,您的main.py代码会尝试在文件夹级别找到课程Reader,但您需要在Reader内查找reader.py。你能尝试改变

吗?

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

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

此外,您有许多名为reader的模块/文件/模块,例如:班级Reader位于reader/reader/reader.py。我会尽量避免,因为它可能导致混淆。

答案 1 :(得分:0)

当您有多个名称相同的模块/模块时,您通常可以将命名空间转换为递归循环。此外,Reader类是大写的。

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

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