从不同文件夹导入文件
我有这样的文件夹结构:
application
├── app
│ └── folder
│ └── file.py
└── app2
└── some_folder
└── some_file.py
我想从 some_file.py
里导入 file.py
中的一个函数,应该怎么做呢?我试过:
from application.app.folder.file import func_name
但是没有成功。
41 个回答
249
当模块放在并行的位置时,就像问题中提到的那样:
application/app2/some_folder/some_file.py
application/app2/another_folder/another_file.py
这种简写方式让一个模块可以被另一个模块看到:
import sys
sys.path.append('../')
1348
下面的代码是没问题的:
from application.app.folder.file import func_name
只要确保这个 folder
文件夹里也有一个 __init__.py
文件就行。这个文件让这个文件夹可以被当作一个包来使用。我不太明白其他回答为什么提到 PYTHONPATH
。
2282
注意:这个回答是针对一个非常具体的问题的。对于大多数从搜索引擎过来的程序员来说,这可能不是你们想要的答案。通常情况下,你应该把文件整理成包(可以看看其他的回答),而不是修改搜索路径。
默认情况下,你是不能这样做的。当你导入一个文件时,Python只会在运行入口脚本的目录和 sys.path
中查找文件,这个路径包括了一些地方,比如包的安装目录(其实这个过程比这复杂一点,但大部分情况下这样说就够了)。
不过,你可以在运行时添加到Python的路径中:
# some_file.py
import sys
# caution: path[0] is reserved for script path (or '' in REPL)
sys.path.insert(1, '/path/to/application/app/folder')
import file