导入在具有多个目录的python中不起作用
Posted
技术标签:
【中文标题】导入在具有多个目录的python中不起作用【英文标题】:import not working in python with multiple directory 【发布时间】:2022-01-16 16:50:19 【问题描述】:Project_folder
main.py
folder_x
__init__.py
A.py
B.py
folder_y
__init__.py
C.py
D.py
我有一个像上面这样的项目结构。在main.py
,我正在导入A.py
from folder_x.A import A
在A.py
文件中我有
from B import B
但它正在给予
from B import B
ModuleNotFoundError: No module named 'B'
我找到了一些相关问题的答案(更新系统路径)。但是有没有别的办法?
而且我也不允许修改A.py
或B.py
【问题讨论】:
将from B import B
更改为from .B import B
我不允许更改文件A.py
或B.py
@Gahan
【参考方案1】:
Python 解释器不会以您试图假设的方式解释您的代码。
无论何时检查-print(sys.path)
列出的所有路径都可以使用python的import语句,并且必须使用它以适当的层次结构导入才能成功执行操作。
由于您正在执行项目,您的根工作目录将是:Project_folder
from folder_x.A import A
可以工作,因为路径可以从Project_folder
映射
为了让您能够在内部使用模块,您需要使用具有Project_folder
相对路径的模块内部导入
即from folder_x.B import B
和 from folder_x.A import A
既然你提到你不能改变A.py
或B.py
你只有两种可能:
-
将文件本身移动到
Project_folder
下
使用sys.path.insert
或sys.path.append
将文件夹路径folder_x
添加到系统路径。
【讨论】:
【参考方案2】:当您执行 main.py python 解释器时,使用该 main.py 文件路径作为执行整个应用程序的基本路径。
该基本路径始终引用应用程序中的导入模块。 因此,无论何时进行导入,请确认您的导入应遵循该基本路径(如上所述)目录结构。
以下是您可以尝试的解决方案, 只需在您的代码中添加上述行将帮助您以更好的方式解决问题。
sys.path.append(os.path.abspath(os.path.join(os.getcwd(), os.pardir)))
或
import sys
from os.path import dirname, abspath
d=dirname(dirname(abspath(__file__)))
sys.path.append(d)
【讨论】:
【参考方案3】:你需要试试这个
from folder_x.B import B
【讨论】:
【参考方案4】:将 B.py
从 folder_x 移动到 Project_folder
【讨论】:
不允许修改A.py
或B.py
【参考方案5】:
试试这个:
import sys
function_path = r'C:\Users\hogsione\jupyter' # Folder path where your .py file is present
sys.path.insert(1, function_path)
from A import my_function
【讨论】:
以上是关于导入在具有多个目录的python中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Spring Security 具有不同用户详细信息的多个 HTTPSecurity 服务在 Spring Boot 中不起作用