我在linux环境中使用python 2.7并且在某些条件下导入.py文件时遇到问题。我的目录树如下:
/mainFolder
executable.py
/Folder
input_file.py
executable.py
使用第input_file.py
行
__import__('input_file')
当我在mainFolder/Folder
文件夹中并运行../executable.py
时,我会收到输出:ImportError: No module named input_file
当我将input_file.py
移到mainFolder
时,它就有效了。从我看来,我认为input_file.py
不是在python的路径中,我知道如何解决这个问题。
我的印象虽然它应该按原样运行,因为这是来自github存储库的代码,并且可能适用于作者的计算机,但显然并非如此。< / p>
是否有可以更改的设置,因此我不必执行sys.path.append(0,'mainFolder/Folder')
之类的操作?
答案 0 :(得分:2)
“Packages”由名为
的文件标识<强> __初始化__。PY 强>
在此包文件夹的根目录中。
在这种情况下,您的树应显示为:
/mainFolder
executable.py
/Folder
**__init__.py**
input_file.py
在这种情况下,如果您想将import module:input_file作为模块,则可以在可执行文件中声明:
from Folder import input_file
甚至
from Folder.input_file import *
from Folder import *
作为this response中的替代和以下解释,我为您的目录结构实现了一个示例:
executable.py
文件内容:
Folder = __import__('Folder.input_file')
print(Folder.input_file.summm(1,2))
input_file.py
文件内容:
def summm(a, b):
return a+b
这很难看,但是按照原始结构建立一个例子。在这种情况下,在__init__.py
文件夹中添加Folder
文件是没有必要的。
答案 1 :(得分:0)
您可以轻松修复它
import Folder.input_file
或
__import__('Folder.input_file')
Folder
是input_file.py
所在文件夹的名称。