我有这样的文件夹结构:

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

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

from application.app.folder.file import func_name

但它不起作用。


当前回答

在linux上的python3中为我工作

import sys  
sys.path.append(pathToFolderContainingScripts)  
from scriptName import functionName #scriptName without .py extension  

其他回答

您可以通过按f5刷新Python shell,或转到运行->运行模块。这样,您就不必更改目录来读取文件中的内容。Python将自动更改目录。但是,如果您想使用PythonShell中不同目录中的不同文件,那么可以在sys中更改目录,正如Cameron之前所说的那样。

这个问题可能是因为Pycharm

我在使用Pycharm时遇到了同样的问题。我有这个项目结构

skylake\
   backend\
      apps\
          example.py
      configuration\
          settings.py
   frontend\
      ...some_stuff

和example.py中配置导入设置的代码引发导入错误

问题是,当我打开Pycharm时,它认为skylake是根路径,并运行了这段代码

sys.path.extend(['D:\\projects\\skylake', 'D:/projects/skylake'])

为了解决这个问题,我只将后端目录标记为源根目录

它解决了我的问题

以防有人仍然需要解决方案,但在上面的答案中没有找到解决方案。这对我有用:

我有这样的文件夹结构:

a
└── b
    ├── c1
    |   └── d
    |       └── a_script.py
    └── c2
        └── a_lib.py

我需要将a_lib.py包含在a_script.py中。这就是我如何解决c2无法识别的错误:

import sys
from pathlib import Path
path_scripts = Path(__file__).resolve().parents[2]
sys.path.append(str(path_scripts))
from c2 import a_lib

当模块位于平行位置时,如问题所示:

application/app2/some_folder/some_file.py
application/app2/another_folder/another_file.py

这种速记使一个模块对另一个模块可见:

import sys
sys.path.append('../')

将application作为python项目的根目录,在application、app和文件夹文件夹中创建一个空__init__.py文件。然后在some_file.py中进行如下更改以获得func_name的定义:

import sys
sys.path.insert(0, r'/from/root/directory/application')

from application.app.folder.file import func_name ## You can also use '*' wildcard to import all the functions in file.py file.
func_name()