Python没有命名的模块

时间:2016-07-06 15:06:26

标签: python python-2.7

我有一个自定义模块,我试图从层次结构下的文件夹中读取:

> project-source
        /tests
            /provider
             my_provider.py
         settings_mock.py
         __init__.py

我想从my_provider.py

打电话
import tests.settings_mock as settings

命令行示例:

project-source> python tests/provider/my_provider.py

错误:

... ImportError: No module named settings_mock

我一直将No module named settings_mock视为错误。我已经将project_source路径导出到PYTHONPATH。我已经通过在其根目录中创建__init__.py文件对包进行了测试,但是错误没有改变。

我可以在cd'ing项目源

时打印settings_mock.py属性
>>> import tests.settings_mock as settings
>>> print settings.storage_provider
correct storage provider value

有人能在这里指出我的错误吗?谢谢!

1 个答案:

答案 0 :(得分:1)

你只有一个小错误。要使用子文件夹,您需要__init__.py,而不是问题中所述的init.py。区别在于__init__是python的内置函数,而init则不是。my_provider.py。在每个子文件夹中都有这个文件告诉pyhon解释器该文件夹是一个"包"需要初始化。

更新:应该注意的是,python通常从脚本所在的当前目录运行。如果您的可执行主脚本是settings_mock,那么它将不知道要导入什么,因为主脚本位于比它尝试导入的对象更低的目录中。把它想象成一个层次结构。脚本只能导入它们下面的内容。如果有text_file = open("/Users/path/to/file/text.txt", "a") 需要导入的内容,请尝试将可执行文件与该文件中的其他所有内容分开。