从不同文件夹导入文件

2541 投票
41 回答
3501102 浏览
提问于 2025-04-16 08:12

我有这样的文件夹结构:

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

撰写回答