python - 从另一个导入的文件导入文件
问题描述
我有以下目录结构:
base_folder
methods_folder
method_1.py
method_2.py
.
.
.
method_n.py
class_methods.py
top_class.py
class_methods.py
导入同一目录中的其他文件,如下所示:
from method_1 import method_1
from method_2 import method_2
.
.
.
from method_n import method_n
(obs:这些methods
文件有一个方法,里面有自己的文件名)
如果我class_methods.py
自己跑,没问题。但是,如果我尝试运行top_class.py
导入class_methods.py
,则会收到错误消息no module named method_1
因此,在执行时top_class.py
,它看不到methods_folder/
. 为什么?
解决方案
运行 python 脚本的推荐方法是使用-m
根包父级的开关 - 所以在你的情况下:
$ cd base_folder
$ python -m top_class
Python 会自动将 base_folder 添加到它的 sys.path 中,你不需要做任何 sys.path/PYTHOPATH 黑客攻击——这些黑客攻击会用样板文件使代码膨胀,并且会在最意想不到的时候崩溃。
现在运行 class_methods 的正确方法也是
$ cd base_folder
$ python -m methods_folder.class_methods
但随后的导入class_methods
应修改为绝对值:
from methods_folder.method1 import method1
...
或亲戚:
from .method1 import method1
...
推荐阅读
- microsoft-edge - 如何在 Microsoft Edge 中设置 UserScript
- point-of-sale - EMV离线数据认证是如何工作的
- azure-devops - powershell commandlet New-AzureRmWebAppSlot 随机给出“'Location' cannot be null”错误
- excel - 如何在单元格中添加一些特定数字
- microservices - 微服务 - 服务发现和服务网关之间的确切区别是什么?
- excel - 从编辑文本框中获取数据
- java - 在 Lollipop (5.1.1) 中加载 JPEG 图像
- wso2 - 在 Kibana 仪表板的 iframe 中加载 WSO2 IS
- php - 自定义帖子类型后不显示高级自定义字段,我该如何使其工作?
- c++ - 无法在 Windows/MinGW 中运行 OpenGL