我有以下文件夹结构。
application/app/folder/file.py
我想从位于另一个 Python 文件中的file.py导入一些功能
application/app2/some_folder/some_file.py
我试过了
from application.app.folder.file import func_name
和其他一些尝试,但到目前为止,我无法正确导入。我怎样才能做到这一点?
默认情况下,您不能这样做。导入文件时,Python 仅搜索当前目录,入口点脚本运行所在的目录以及sys.path
,其中包括诸如软件包安装目录之类的位置(实际上比这稍微复杂一点,但这涵盖了在大多数情况下)。
但是,您可以在运行时添加到 Python 路径:
# some_file.py
import sys
# insert at 1, 0 is the script path (or '' in REPL)
sys.path.insert(1, '/path/to/application/app/folder')
import file
没错:
from application.app.folder.file import func_name
只要确保folder
还包含__init__.py
,就可以将其作为软件包包含在内。不知道为什么其他答案谈论PYTHONPATH
。
当模块处于并行位置时,如下所示:
application/app2/some_folder/some_file.py
application/app2/another_folder/another_file.py
该简写使一个模块对另一模块可见:
import sys
sys.path.append('../')
我认为,一种临时方法是按照文档中所述使用环境变量PYTHONPATH
: Python2 , Python3
# Linux & OSX
export PYTHONPATH=$HOME/dirWithScripts/:$PYTHONPATH
# Windows
set PYTHONPATH=C:\path\to\dirWithScripts\;%PYTHONPATH%
首次导入系统
import sys
第二追加文件夹路径
sys.path.insert(0, '/the/folder/path/name-folder/')
第三步在子目录中创建一个名为__ init __.py 的空白文件(这告诉 Python 它是一个模块)
第四步将模块导入文件夹中
from name-folder import name-module
您的问题是 Python 正在 Python 目录中查找此文件,但找不到它。您必须指定所谈论的目录是您所在的目录,而不是 Python 目录。
为此,您可以更改以下内容:
from application.app.folder.file import func_name
对此:
from .application.app.folder.file import func_name
通过添加点,您说的是在此文件夹中查找应用程序文件夹,而不是在 Python 目录中查找。
答案不够明确,已在 Python 3.6 上进行了测试
使用此文件夹结构:
main.py
|
---- myfolder/myfile.py
myfile.py
包含以下内容:
def myfunc():
print('hello')
main.py
的 import 语句是:
from myfolder.myfile import myfunc
myfunc()
这将打印你好 。
据我所知,直接在要导入的函数的文件夹中添加__init__.py
文件即可完成此工作。
在 Linux 上的 python3 中为我工作
import sys
sys.path.append(pathToFolderContainingScripts)
from scriptName import functionName #scriptName without .py extension
我面临着同样的挑战,尤其是在导入多个文件时,这就是我设法克服的方式。
import os, sys
from os.path import dirname, join, abspath
sys.path.insert(0, abspath(join(dirname(__file__), '..')))
from root_folder import file_name