2017-04-03 136 views
1

这里是专业的Python新手。我创建了一个名为aviation的Python模块,其中有一个名为database.py的文件。无法导入我的模块到另一个模块

我有另一个叫做core的模块,里面有一个文件叫做calculator.py

我想将aviation.database.py导入我的calculator.py

的基本结构如下:

My project 
    aviation (module) 
     - database.py 
    core (module) 
     - calculator.py 
    test.py 

calculator.py文件有一个进口,如:

from aviation import database as aviation_database 

此模块无法识别,我得到一个红色的波浪线表示之多。

如果我在aviationcore之外创建另一个文件test.py并添加上面的导入,这个tests.py文件没有问题 - 导入工作正常。

看来,我需要做的事情,使我的模块可从另一个模块导入......它让我输入安装的模块(如date),但我不知道我错过了什么。

我使用IntelliJ IDE,我的代码位于常规C:\ Users \\ IdeaProjects目录中。

有人可以告诉我该怎么做,为什么我面临这个问题?

+0

我说你必须添加 '我的项目'[PYTHONPATH(http://stackoverflow.com/questions/19917492/how-to-use-pythonpath)。 – carlosvin

+0

@carlosvin嗯,我必须修改系统变量,让我的IDE知道使用所述IDE创建的文件在哪里?它为什么从'test.py'工作?我不想从我的机器上的任何随机位置运行我的代码。 – pookie

+0

您不必修改系统变量,您可以配置您的IDE以在运行脚本时将“我的项目”添加到python路径。我猜你正在运行'python test.py',这意味着python将'My project'目录添加到执行python路径。您可以尝试运行'python core/calculator.py' – carlosvin

回答

0

那么我会建议你在模块中创建__init__文件。

python3 doc指出:

__init__.py文件都需要使Python视该 目录为一个包;这样做是为了防止 目录具有公共名称(如字符串),无意中隐藏了稍后在模块搜索路径中发生的有效模块。在 最简单的情况下,初始化的.py可以只是一个空文件,但它可以还 执行初始化代码为包或设置所有 变量,后面叙述。

所以,你的目录结构变得

My project 
    aviation (module) 
     - database.py 
     - __init__.py 
    core (module) 
     - calculator.py 
     - __init__.py 
    test.py 

现在导入所有的东西在你的__init__文件,你从其他包想给我们。像航空__init__.py文件写

import database 

同样,对于核心的__init__.py 现在的计算器。py你可以通过导入他们 -

from aviation import database 

让我知道,如果这有帮助!

感谢

+0

谢谢,我已经尝试过,但我不认为Python 3我们需要使用__init__.py。我认为这只是包(模块集合)。无论如何,它不起作用。 – pookie

+0

然后,一个简单的heck将为你工作, 在sys.path中追加项目的路径 –