Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Python中进行相对导入?

如何在Python中进行相对导入?

提问于 2017-12-21 03:59:17
回答 2关注 0查看 289

想象一下这个目录结构:

代码语言:txt
AI代码解释
复制
app/
代码语言:txt
AI代码解释
复制
   __init__.py
代码语言:txt
AI代码解释
复制
   sub1/
代码语言:txt
AI代码解释
复制
      __init__.py
代码语言:txt
AI代码解释
复制
      mod1.py
代码语言:txt
AI代码解释
复制
   sub2/
代码语言:txt
AI代码解释
复制
      __init__.py
代码语言:txt
AI代码解释
复制
      mod2.py

我正在编码mod1,我需要从中导入mod2。我应该怎么做?

我试过,from ..sub2 import mod2但我得到了一个“非包装尝试相对导入”。

我google搜索,但只发现“ sys.path操纵”黑客。有没有一个干净的方式?

编辑:我所有__init__.py的都是空的

EDIT2:我想这样做,因为SUB2包含了为子包(共享类sub1,subX等等)。

编辑3:我正在寻找的行为是相同的PEP 366

回答 2

秋之夕颜清

发布于 2017-12-21 04:16:54

代码语言:txt
AI代码解释
复制
main.py
代码语言:txt
AI代码解释
复制
setup.py
代码语言:txt
AI代码解释
复制
app/ ->
代码语言:txt
AI代码解释
复制
    __init__.py
代码语言:txt
AI代码解释
复制
    package_a/ ->
代码语言:txt
AI代码解释
复制
       __init__.py
代码语言:txt
AI代码解释
复制
       module_a.py
代码语言:txt
AI代码解释
复制
    package_b/ ->
代码语言:txt
AI代码解释
复制
       __init__.py
代码语言:txt
AI代码解释
复制
       module_b.py
  • 你运行python main.py。
  • main.py 作用: import app.package_a.module_a
  • module_a.py 不 import app.package_b.module_b

另外2或3可以使用: from app.package_a import module_a

只要你有app你的PYTHONPATH,这将工作。main.py那么可以在任何地方。

所以,你写一个setup.py将整个应用程序包和子包复制(安装)到目标系统的python文件夹,并定位main.py到系统的脚本文件夹。

Dust

发布于 2017-12-21 04:16:23

个人似乎都想告诉你应该做什么,而不是仅仅回答这个问题。

问题在于,通过将mod1.py作为参数传递给解释器,将模块作为“__main__”运行。

从PEP 328:

相对导入使用模块的__name__属性来确定模块在包层次结构中的位置。如果模块的名称不包含任何包信息(例如,它被设置为'__main__'),那么无论模块实际位于文件系统的哪个位置,相对导入都会被解析为模块是顶级模块。

在Python 2.6中,他们增加了相对于主模块引用模块的能力。 PEP 366描述了这种变化。

更新:根据Nick Coghlan,推荐的替代方法是使用-m开关在软件包内部运行模块。

和开发者交流更多问题细节吧,去 写回答
相关文章
python包相对导入
注意此时mobike成为一个python包。 在loc.py中导入utils.py该怎么办?
py3study
2020/01/02
2.2K0
Python的绝对导入和相对导入
Python 相对导入与绝对导入,这两个概念是相对于包内导入而言的。包内导入即是包内的模块导入包内部的模块。
狼啸风云
2019/11/27
5K0
Python相对、绝对导入浅析
这篇文章从另外一个不同的视角来分析一下Python的import机制,主要的目的是为了搞懂import中absolute、relative import遇到的几个报错。  这里不同的视角是指从Python import hooks这个方面来展开,当然本身关于Python import hooks有很多的文章,我这里不打算展开聊这个方面的内容,文章中主要会结合代码和PEP 302 – New Import Hooks这个PEP。  1. 几个跟import相关模块属性 首先我们需要了解几个跟import相关
庞小明
2018/03/09
1.3K0
【说站】如何在mysql表中进行导入
1、导入有两种不同的方法,分别是load data infile...和mysqlimport。
很酷的站长
2022/11/23
1.3K0
【Python】对绝对导入与相对导入的理解的补充
在前一篇文章对相对导入的“相对”其实已经讲得比较清楚了,关键的一点是,“相对”是相对package的意思。相对导入的常用语法:
明月AI
2021/10/28
1.4K0
【Python】对绝对导入与相对导入的理解的补充
【说站】python文件导入相对路径
python文件导入相对路径 说明 1、一个简单的文件名,比如memo.txt,也被视为路径,是相对路径。 2、因为是相对于当前目录的。相对路径是从当前目录开始的。 实例 >>> import os >>> os.getcwd()  # getcwd() 返回当前工作目录 'D:\\Python36' >>> os.chdir('C:\\Windows\\System32')  # chdir() 切换当前目录 >>> os.getcwd() 'C:\\Windows\\System32' >>> im
很酷的站长
2022/11/24
7290
【说站】python文件导入相对路径
如何在云中进行转型
在过去一年,人们听到的一个更受欢迎的流行语是“转型”,可能听说过“IT转型”,“数字转型”或“转型”这些术语,那么,这究竟意味着什么?这真的取决于你与谁交流,因为不同的人会给出不同的答案。但每个人都会
静一
2018/03/28
6640
如何在云中进行转型
如何在 Vim 中进行搜索
Vim 或者它的前身 Vi 在 macOS 和大部分 Linux 发行版中都已经预装了。 搜索文件是在处理文件时最常用的任务之一。当你没有遇到你喜欢的编辑器时,了解 Vim 基础知识可能会非常有帮助。
雪梦科技
2020/06/28
35.2K0
python中进制互换
暴力解法,把数字转换成二进制字符串去掉0b, 用遍历的方法取字符串补码, 再转回十进制数。
Ewdager
2020/07/14
8210
Image无法使用相对路径导入
不能是使用相对路径的原因在于,图片资源未导入dotnet程序,所以在程序外部,通过绝对路径的方式查找加载。
sofu456
2019/07/09
2.1K0
Image无法使用相对路径导入
[实战]如何在Kali Linux中进行WIFI钓鱼?
文中提及的部分技术可能带有一定攻击性,仅供安全学习和教学用途,禁止非法使用! 0x00 实验环境 操作系统:Kali 1.0 (VM) FackAP: easy-creds 硬件:NETGEAR wg111 v3 RTL8187B 网卡(kali下免驱) 靶机:安卓、iPhone设备 0x01 环境搭建 git clone https://github.com/brav0hax/easy-creds cd easy-creds bash instal
用户1631416
2018/04/12
5.1K0
[实战]如何在Kali Linux中进行WIFI钓鱼?
如何在 Core Data 中进行批量操作
Core Data 是 Apple 为其生态提供的拥有持久化功能的对象图管理框架。具备稳定( 广泛应用于苹果的各类系统软件 )、成熟( Core Data 发布于 2009 年,其历史可以追溯到上世纪 90 年代 )、开箱即用( 内置于整个苹果生态系统 )等特点。
东坡肘子
2022/07/28
2K0
如何在 Core Data 中进行批量操作
IntelliJ IDEA 如何在 Java 中进行快速注释
在这里有一个小技巧是,如果你想一次连续注释多行的话,你不需要每一行每一行的选择。。
HoneyMoose
2021/08/12
1.5K0
IntelliJ IDEA 如何在 Java 中进行快速注释
如何在Power Query中进行绝对匹配替换?
之前我们有个例子是批量关键词的替换,我们使用的是Table.ReplaceValue,但是有一个问题,如果存在同样的字符,则会被直接替换掉,也就是模糊匹配每一个值。
逍遥之
2020/03/24
3.1K0
如何在Power Query中进行绝对匹配替换?
如何在VMware中进行创建CentOS虚拟机
今天给大家分享如何在VMware中创建CentOS虚拟机,CentOS6.7为例进行说明,CentOS7版本亦可以参考该教程,具体的教程如下。
Python进阶者
2020/06/13
1.4K0
只需一行代码,就能导入所有的Python库?
GitHub地址:https://github.com/8080labs/pyforest
咋咋
2021/09/01
4090
只需一行代码,就能导入所有的Python库?
只需一行代码,就能导入所有的Python库?
GitHub地址:https://github.com/8080labs/pyforest
1480
2021/05/07
5270
只需一行代码,就能导入所有的Python库?
只需一行代码,就能导入所有的 Python 库?
GitHub地址:https://github.com/8080labs/pyforest
崔庆才
2021/05/17
9320
只需一行代码,就能导入所有的 Python 库?
只需一行代码,就能导入所有的Python库?
如此,反复编写同一条import语句,就算是复制粘贴,也会感觉到麻烦,这时Pyforest库就可以上场了。
秃头程序员
2021/12/21
6410
如何在 Python 里优雅地读取文件特定行
如果文件非常大,不能读取到内存中,那么你可能会通过for 循环数行数,数到特定行:
青南
2019/09/16
2.6K0

相似问题

如何在Python中导入其他文件?

2671

Python中的动态模块导入?

2444

Python空闲似乎无法在python 36中导入Pyper片段?

2268

如何在Google Chrome中进行调试时终止脚本执行?

21.6K

如何在MySQL中进行正则表达式替换?

25.3K
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
相关问答用户
新浪微博 | 高级总监擅长4个领域
到家集团 | 技术VP擅长5个领域
擅长5个领域
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档