我有这样的文件夹结构:

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

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

from application.app.folder.file import func_name

但它不起作用。


当前回答

这里的答案不够清晰,这是在Python 3.6上测试的

使用此文件夹结构:

main.py
|
---- myfolder/myfile.py

其中myfile.py包含内容:

def myfunc():
    print('hello')

main.py中的import语句是:

from myfolder.myfile import myfunc
myfunc()

这将打印hello。

其他回答

├───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

如果有多个文件夹和子文件夹,则始终可以从主目录导入任何类或模块。

例如:项目的树形结构

Project 
├── main.py
├── .gitignore
|
├── src
     ├────model
     |    └── user_model.py
     |────controller
          └── user_controller.py

现在,如果您想从main.py文件中的user_model.py导入“UserModel”类,可以使用:

from src.model.user_model.py import UserModel

此外,您可以使用同一行在user_controller.py文件中导入同一类:

from src.model.user_model.py import UserModel

总之,您可以提供主项目目录的引用,以导入project目录中任何python文件中的类和文件。

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

从<MySubFolder>导入<MyFile>

MyFile位于MySubFolder中。

您可以使用importlib导入模块,其中您希望使用如下字符串从文件夹中导入模块:

import importlib

scriptName = 'Snake'

script = importlib.import_module('Scripts\\.%s' % scriptName)

这个示例有一个main.py,它是上面的代码,然后是一个名为Scripts的文件夹,然后您可以通过更改scriptName变量从这个文件夹中调用所需的任何内容。然后可以使用脚本引用此模块。例如,如果我在Snake模块中有一个名为Hello()的函数,您可以通过这样做来运行该函数:

script.Hello()

我已经在Python 3.6中测试过了

如果从特定路径加载模块的目的是帮助您开发自定义模块,则可以在测试脚本的同一文件夹中创建指向自定义模块根目录的符号链接。对于在该文件夹中运行的任何脚本,此模块引用将优先于以相同名称安装的任何其他模块。

我在Linux上测试了这个,但它应该可以在任何支持符号链接的现代操作系统中运行。

这种方法的一个优点是,您可以指向位于您自己的本地SVC分支工作副本中的模块,这可以大大简化开发周期,并减少管理不同版本模块的故障模式。