社区首页 >问答首页 >给定我的文件结构,我应该使用什么命令来导入以下模块?

给定我的文件结构,我应该使用什么命令来导入以下模块?
EN

Stack Overflow用户
提问于 2020-08-10 20:24:26
回答 1查看 56关注 0票数 0

我正在努力一致地导入我用python编写的模块,使用Spyder IDE设置到我的顶级python脚本的目录中。以下是我的文件结构,基于this指南。

代码语言:javascript
代码运行次数:0
复制
root_folder/
    submodules
        moduleA/
            data/ # contains input Excel files
            output/ # contains output files
            code1.py
        moduleB/
            data/
            output
            code2.py
    main.py
    code3.py

main.py中,我试图用from .submodules.moduleA import code1导入code1.py,但是我得到了这个错误:"No module named '__main__.submodules'; '__main__' is not a package"

我还尝试从main.py导入code3.py,为此我尝试使用from . import code3,但得到了一个与以前类似的错误:cannot import name 'code3' from '__main__' (unknown location)

给定我的文件结构,我应该使用什么命令来相对导入我的模块?

EN

回答 1

Stack Overflow用户

发布于 2020-08-10 20:55:56

python的一个具有挑战性的概念是,您运行的顶级脚本不是模块*,也不在包中。例如,您会注意到顶级脚本始终是__name__ == __main__。这与操作系统程序密切相关,其中可执行文件位于PATH中,但它们加载的库位于系统定义的LIB路径中。其思想是python模块和包由所有脚本共享,无论它们在哪里。

为了迎合人们对实际捆绑和安装python包的反感,python将脚本的目录添加到其模块路径中。这使得与脚本对等的.py文件可以导入模块和任何子目录,潜在地可以导入包。这是有风险的业务,因为碰巧在同一目录中的.py文件可能会隐藏您想要导入的命名相似的模块。

请注意,与main.py对等的.py文件不在包中。code3.py不在submodules包中,它也不能使用相对导入。

当您运行main.py时,它可以

代码语言:javascript
代码运行次数:0
复制
import submodules.moduleA.code1

但是它不能做任何相对的导入。有趣的是,main.py可以导入自身

代码语言:javascript
代码运行次数:0
复制
import main

并且会有main的第二个副本在运行,具有不同的名称空间。它的名字是__name__ == "main"

(*)这有点太强了。顶级脚本成为一个称为"__main__"的模块。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63347514

复制
相关文章
EF Core 3.1 入门视频-03 设置字段属性
http://mpvideo.qpic.cn/0b78waaacaaamaaj2mtojzpvbmgdagyaaaia.f10002.mp4?dis_k=1595f983c4d9d6ba2deca7e
宿春磊Charles
2022/03/29
2550
EF Core 3.1 入门视频-11 配置 EF Core
http://mpvideo.qpic.cn/0bf2fqaacaaa3majyklonbpvalgdaewaaaia.f10002.mp4?dis_k=3fe082559d1823e51dbaa11
宿春磊Charles
2022/03/29
5010
EF Core利用Scaffold从根据数据库生成代码
在EF6 之前的时代,如果需要从数据库中生成代码,是可以直接在界面上操作的,而到了EF Core的时代,操作方式又有更简便的方式了,我们只需要记住以下这条指令。 Scaffold-DbContext "Server=服务器地址;Database=数据库名;uid=用户名;pwd=密码" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models 颜色:连接字符串 颜色:表示该数据源是sqlserver数据库,如果是mysql则用Pomelo.Entit
码农阿宇
2018/04/18
9870
EF Core 3.1 入门视频-06 修改和删除
http://mpvideo.qpic.cn/0b78wmaacaaa24ajzqdojvpvbm6dagzqaaia.f10002.mp4?dis_k=c1adbc7d5c171092c6e3d50
宿春磊Charles
2022/03/29
1890
EF Core 3.1 入门视频-05 添加和查询
http://mpvideo.qpic.cn/0bf2huaogaaaoqah5qdov5pvapod4m6qbyya.f10002.mp4?dis_k=a09094c6d6a06ebd388dee7
宿春磊Charles
2022/03/29
3080
EF Core 3.1 入门视频-01 准备工作
http://mpvideo.qpic.cn/0b78wiaacaaa7aaj2r3okfpvbmwdagzaaaia.f10002.mp4?dis_k=73040d3a12db90b7cecc835
宿春磊Charles
2022/03/29
2510
EF Core 3.1 入门视频-10 执行原生SQL
http://mpvideo.qpic.cn/0bf2qmbh6aacleaoeg3mgvpvfa6dp6bqe7ya.f10002.mp4?dis_k=361051a3b4994e09e862108
宿春磊Charles
2022/03/29
5930
EF Core 3.1 入门视频-08 加载关系数据
http://mpvideo.qpic.cn/0bf2hyc4iaafuiafshtlrzpvkpwdyq7alraa.f10002.mp4?dis_k=e10af43658bd2b923188b3d
宿春磊Charles
2022/03/29
3050
EF Core 3.1 入门视频-02 创建数据库
http://mpvideo.qpic.cn/0b7854aacaaay4ajzgdojvpvb36dahxqaaia.f10002.mp4?dis_k=8a3835d77347ec6cd69f594
宿春磊Charles
2022/03/29
3550
EF Core 3.1 入门视频-07 添加关系数据
http://mpvideo.qpic.cn/0bf2jyaacaaazqajzrtomzpvatwdafhaaaia.f10002.mp4?dis_k=96fb05c7eed54481b4a9366
宿春磊Charles
2022/03/29
2150
EF Core 3.1 入门视频-09 修改关系数据
http://mpvideo.qpic.cn/0bf2fuaogaaas4ah4olowjpvalod4mwqbyya.f10002.mp4?dis_k=d9f17a7f2f1597cc46c3462
宿春磊Charles
2022/03/29
2990
EF Core索引
索引是跨多个数据存储区的常见概念。 尽管它们在数据存储中的实现可能会有所不同,但也可用于基于列(或一组列)更高效地进行查找。
跟着阿笨一起玩NET
2020/11/10
1.6K0
EF Core3.1 CodeFirst动态自动添加表和字段的描述信息
为什么要用这个呢.. 因为EF Core3.1 CodeFirst 对于自动添加描述这块 只有少部分的数据库支持..
GuZhenYin
2021/07/16
1.6K0
EF Core3.1  CodeFirst动态自动添加表和字段的描述信息
EF Core 3.1 入门视频-04 多对多,一对一
http://mpvideo.qpic.cn/0b78wmaaaaaajaajzbtom5pvbm6daczqaaaa.f10002.mp4?dis_k=dd3ee0251919e72ac370ba3
宿春磊Charles
2022/03/29
3960
.Net Core + EF + mysql 从数据库生成实体
原文地址:https://blog.spiritling.cn/posts/daefc0a4/
SpiritLing
2020/07/20
1.7K0
EF Core 数据验证
数据验证是每个项目必须存在的,可以防止不符合系统规范的数据进入系统进而导致系统不稳定甚至崩溃。我们可以自己编写代码(包括前台和后台代码)进行验证,但是这样一方面代码量较大,另一方面有可能验证代码覆盖不完全。但是在 Entity Framework Core (以下简称 EF Core )中这些问题全可以解决。在 EF Core 中有两种验证模式,分别是内置模型验证和第三方扩展模型验证。下面我分别对这两种模式进行讲解,在讲解前我们先来创建必须的模型。
喵叔
2020/09/08
1.2K0
C# 数据操作系列 - 7. EF Core 导航属性配置
在上一篇,大概介绍了Entity Framework Core关于关系映射的逻辑。在上一篇中留下了EF的外键映射没有说,也就是一对一,一对多,多对一,多对多的关系等。这一篇将为大家细细分析一下,如何设置这些映射。
程序员小高
2020/05/21
3.3K0
EF Core相关工具使用
首先确保本地netcore sdk安装完毕,如下是卸载tool、安装指定版本tool、更新到指定版本的tool 的命令:
郑小超.
2022/05/11
5080
EF Core相关工具使用
基于Saas主键表生成主键id
首先需要对当前的id进行拦截操作,也即使用aop的切面Aspect对切点进行拦截,在进行新增的时候进行拦截:
路行的亚洲
2021/06/24
1.8K0
EF Core 基础知识
EF Core 默认会与 ASP.NET Core的日志提供程序一起工作,只需要使用AddDbContext或AddDbContextPool添加服务即可。
拓荒者IT
2019/09/23
7900

相似问题

EF Core 3.1导航属性

30

EF Core 3.1视图导航属性

133

带有Postgres的EF Core生成负主键

21

EF Core 3.1 Fluent API

36

EF Core 3.1查询优化

13
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文