Python无法导入自定义模块,即使有__init__.py

8 投票
4 回答
61921 浏览
提问于 2025-04-17 12:08

我有一个文件夹里面有一个 __init__.py 文件。

这个 __init__.py 文件的内容是:

#!/usr/bin/python2
flags="test"

还有一个文件叫做 main.py:

#!/usr/bin/python2
import foldername

def main():
    print foldername.flags

if __name__ == '__main__':
main()

现在,当我在这个文件夹里运行 ./main.py 的时候,出现了一个错误:

ImportError: No module named foldername

4 个回答

3

确保你的文件结构是这样的:

./folder/__init__.py
./main.py

并且不要有一个叫做 folder.py 的文件

切换到上一级文件夹,这样 ls folder/__init__.py 这个命令才能正常工作。

接下来,试着运行 python -c "import folder"

5

关于 PYTHONPATH 的问题。确保“文件夹名称”在你的路径中是可用的。如果你是在“文件夹名称”内部运行的,可能会找不到它。试着从“文件夹名称”的上级目录运行。

这里有一个 关于如何找到你的 PYTHONPATH 的问题

7

父级文件夹运行foldername

    $ python -m foldername.main

如果你把main.py改名为__main__.py,那么你就可以这样运行它(自从Python 2.7开始):

    $ python -m foldername

python -m会自动把当前目录加到你的Python路径中(也就是sys.path)。

Parent Folder/
└── foldername
    ├── __init__.py
    │   #    flags="test"
    └── __main__.py
        #    import foldername
        #   
        #    def main():
        #        print foldername.flags
        #   
        #    if __name__=="__main__":
        #        main()

如果foldername的父级目录在你的Python路径里,那么你就可以在任何目录下运行上面的命令。

撰写回答