我有这样的文件夹结构:
application
├── app
│ └── folder
│ └── file.py
└── app2
└── some_folder
└── some_file.py
如何从file.py或some_file.py中导入函数?我尝试了:
from application.app.folder.file import func_name
但它不起作用。
我有这样的文件夹结构:
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中。