首页 / 知识
如何在python中进行相对导入?
2023-04-15 23:09:00

How to do relative imports in Python?想象一下这个目录结构:
我在编码 我尝试过 我到处搜索,但只发现" 编辑:我的所有 edit2:我之所以这么做,是因为sub2包含跨子包共享的类( 伊迪丝3:我要找的行为和PEP 366中描述的一样(谢谢约翰B) 每个人似乎都想告诉你应该做什么,而不仅仅是回答问题。 问题是,通过将mod1.py作为参数传递给解释器,您将模块作为"主"运行。 来自PEP 328:
在Python2.6中,他们添加了相对于主模块引用模块的能力。PEP 366描述了变化。 更新:根据NickCoghlan的说法,推荐的替代方法是使用-m开关运行包中的模块。
或者2或3可以使用: 只要你的肾盂里有一个 因此,您编写一个 以下是适合我的解决方案: 我以 这一问题发生在相对导入中的真正原因是相对导入通过使用模块的 因此,通过使用-m开关,可以向python提供包结构信息,通过这些信息,python可以成功地解析相对导入。 在进行相对导入时,我多次遇到此问题。而且,在阅读了所有之前的答案之后,我仍然无法在不需要将样板代码放入所有文件的情况下,以一种干净的方式解决它。(尽管有些评论真的很有帮助,多亏了@ncoghlan和@xiongchiamiov) 希望这能帮助那些正与进口问题作斗争的人,因为经历政治公众人物真的不好玩。 "guido将包内运行脚本视为反模式"(已拒绝)PEP-3122) 我花了这么多时间试图找到一个解决方案,阅读了栈溢出的相关文章,并对自己说:"一定有更好的方法!"好像没有。 100%解决:
导入设置/本地设置.py在app/main.py中: MY.PY:
我正在使用这段代码从路径导入模块,希望能有所帮助 用实例说明 注:所有
应用程序/软件包
应用程序/软件包
Me.Py
如果运行
所以 不幸的是,这是一个sys.path黑客,但它工作得很好。 我在另一层遇到了这个问题:我已经有了一个指定名称的模块,但它是错误的模块。 我想做的是如下(我工作的模块是模块3):
请注意,我已经安装了mymodule,但在我的安装中没有"mymodule1" 我会得到一个importError,因为它试图从我安装的模块导入。 我尝试执行sys.path.append,但没有成功。工作的是sys.path.insert
真是一个黑客,但一切都正常!所以请记住,如果您希望自己的决定覆盖其他路径,那么您需要使用sys.path.insert(0,pathname)使其工作!这对我来说是一个非常令人沮丧的症结,很多人都说要在sys.path中使用"append"函数,但是如果已经定义了一个模块,这就行不通了(我发现它的行为非常奇怪)。 让我把这个放在这里,作为我自己的参考。我知道这不是一个好的python代码,但是我需要一个脚本来完成我正在进行的项目,我想把这个脚本放到一个
正如@evgenisegev在对op的注释中所说,您可以从
这是从这个答案中得出的。 看看http://docs.python.org/whatsnew/2.5.html pep-328-absolute-and-relative-imports。你可以做到
来自python文档,
除约翰B所说的之外,似乎设置 我也有同样的问题,无论是PEP 328还是366都不能完全解决这个问题,因为在一天结束之前,我都需要把包的头包含在 我还应该提到,我没有找到如何格式化应该进入这些变量的字符串。是 我发现将"pythonpath"环境变量设置到顶部文件夹更容易:
然后:
当然,Python是"全球性的",但它还没有给我带来麻烦。 假设您在顶层运行,然后在
而不是
|
最新内容
相关内容
linux命令循环导入?
linux命令循环导入?,服务,系统,密码,数据,增长,名字,数字,官网,地址,文件,mysql在linux命令行下导入txt文件mysqlimport命令 mysqlimport可以如何在linux执行命令?
如何在linux执行命令?,单位,电脑,命令,系统,基础,发行,工具,工作,信息,文件,mv什么意思呢?1、MV的意思具体如下:mV是一个较小的电压单位,可以用linux导入导出命令?
linux导入导出命令?,密码,数据,系统,代码,情况,数据库,工具,服务,软件,网上,linux系统中mysql数据库的导入和导出MySQL数据库导出 方法1:mysqldlinux导入导出命令?
linux导入导出命令?,密码,数据,系统,代码,情况,数据库,工具,服务,软件,网上,linux系统中mysql数据库的导入和导出MySQL数据库导出 方法1:mysqldlinux目录结构树命令?
linux目录结构树命令?,系统,工作,信息,数据,设备,管理,目录,发展,时间,结构,Linux系统常用操作命令有哪些1、linux常用命令: pwd命令 该命令如何在linux命令清屏?
如何在linux命令清屏?,系统,地址,信息,基础,电脑,命令,名称,集团,产品,管理,别不信!掌握好这20条Linux基础命令,让你的操作效率直接双倍1、系linux命令看文件编码?
linux命令看文件编码?,状态,系统,文件,工具,名称,数据,命令,格式,汉字,以下,Linux如何使用enca查看文件编码并转换1、在Linux中查看文件编码可linux如何在线装命令?
linux如何在线装命令?,软件,系统,环境,发行,在线,名称,简介,工具,设备,做好,如何用命令行在Linux下安装软件?1、首先启动CentOS7,在VMware中点linux导入证书命令?
linux导入证书命令?,证书,环境,管理,官网,认证,流程,系统,技术,正规,工具,Linux的ssl证书安装步骤安装SSL准备安装Openssl要使Apache支持SSL,需linux命令改变编码?
linux命令改变编码?,系统,文件,工作,代码,工具,命令,字符集,格式,以下,方式,linux查看系统编码和修改系统编码的方法1、查看系统语言、修改配修改linux编码命令?
修改linux编码命令?,系统,文件,命令,情况,标准,工作,格式,字符集,以下,方式,linux文件编码转换及Windows上创建的文件转为Linux格式1、拷贝到W如何在linux编译命令?
如何在linux编译命令?,代码,工具,基础,环境,百度,源程序,语言,文件,终端,编译器,Linux能直接编译C语言吗?1、在Linux下面,如果要编译一个C语言