我有这样的文件夹结构:

application
├── app
│   └── folder
│       └── file.py
└── app2
    └── some_folder
        └── some_file.py

如何从file.py或some_file.py中导入函数?我尝试了:

from application.app.folder.file import func_name

但它不起作用。


当前回答

我已经多次遇到这些问题。我已经多次来到同一页。在我的上一个问题中,我必须从固定目录运行服务器,但每当调试时,我都希望从不同的子目录运行。

import sys
sys.insert(1, /path) 

不适合我,因为在不同的模块中,我必须读取不同的*.csv文件,这些文件都在同一目录中。

最后,我想对我有用的不是蟒蛇,而是:

我在要调试的模块上使用了if __main__,它从不同于通常的路径运行。

So:

# On top of the module, instead of on the bottom
import os
if __name__ == '__main__':
    os.chdir('/path/for/the/regularly/run/directory')

其他回答

├───root
│   ├───dir_a
│   │   ├───file_a.py
│   │   └───file_xx.py
│   ├───dir_b
│   │   ├───file_b.py
│   │   └───file_yy.py
│   ├───dir_c
│   └───dir_n

您可以将父目录添加到PYTHONPATH,为了实现这一点,您可以在sys.path中列出的“模块搜索路径”中使用依赖于操作系统的路径。因此,您可以像下面这样轻松地添加父目录:

# file_b.py

import sys
sys.path.insert(0, '..')

from dir_a.file_a import func_name

没有问题:

from application.app.folder.file import func_name

只需确保文件夹还包含__init__.py,这允许它作为包包含。不知道为什么其他答案都提到了巨蟒。

据我所知,直接在要导入的函数的文件夹中添加__init__.py文件即可完成此任务。

我认为一种特别的方法是使用环境变量PYTHONPATH,如文档中所述:Python2,Python3

# Linux & OSX
export PYTHONPATH=$HOME/dirWithScripts/:$PYTHONPATH

# Windows
set PYTHONPATH=C:\path\to\dirWithScripts\;%PYTHONPATH%

而不是仅仅做一个导入。。。,执行以下操作:

从<MySubFolder>导入<MyFile>

MyFile位于MySubFolder中。