Python中文
首页
教程
问答
标签
搜索
登录
注册
包内模块的相对导入
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我怎样才能使一个包中的模块<code>.adipiscing.lorem_ipsum</code>可用,以使<strong>干净地使用导入系统</strong>,并且不让无关的名称不被使用</strong>?在</p> <p>给定代码基:</p> <pre><code>foo/ consecteur.py adipiscing/ lorem_ipsum.py </code></pre> <p><code>consecteur</code>模块需要访问<code>adipiscing.lorem_ipsum</code>模块。在</p> <p>这就是我想做的:</p> ^{pr2}$ <p>这行不通;<code>from . import adipiscing.lorem_ipsum</code>是一个语法错误。在</p> <h2>不满足的选项</h2> <h3>使用隐式相对导入</h3> <pre class="lang-python prettyprint-override"><code># consecteur.py import adipiscing.lorem_ipsum dolor = adipiscing.lorem_ipsum.dolor_sit_amet() </code></pre> <p>这不必要地混淆了<code>adipiscing.lorem_ipsum</code>是绝对导入还是相对导入。当导入是相对的时,代码应该是显式的。在</p> <h3>将模块从其命名空间包中拉出</h3> <pre class="lang-python prettyprint-override"><code># consecteur.py from .adipiscing import lorem_ipsum dolor = lorem_ipsum.dolor_sit_amet() </code></pre> <p>这将丢失通过读取<code>adipiscing.lorem_ipsum</code>所传递的有价值的信息,尤其是如果<code>lorem_ipsum</code>是一个通用词,需要由<code>adipiscing</code>包命名空间将其上下文化。在</p> <h3>使用损坏的名称导入</h3> <pre class="lang-python prettyprint-override"><code># consecteur.py from .adipiscing import lorem_ipsum as adipiscing_lorem_ipsum dolor = adipiscing_lorem_ipsum.dolor_sit_amet() </code></pre> <p>这在视觉上是令人困惑的;期望<code>adipiscing.lorem_ipsum</code>的人可以很容易地键入希望它正常工作的名称,但该名称不可用。使用一个令人困惑的相似名称并不是一个好的解决方案;使用一个不同的名称也不是一个好的解决方案,因为整个目的是使<code>adipiscing.lorem_ipsum</code>可用。在</p> <p>如果包名或模块名中的一个或两个名称实际上已经有下划线,那么这也是不明确的。如果一个下划线代表一个点,那么这个点和一个实际上包含一个下划线的名称是无法区分的。在</p> <h3>导入包,尝试使用模块</h3> <pre class="lang-python prettyprint-override"><code># consecteur.py from . import adipiscing dolor = adipiscing.lorem_ipsum.dolor_sit_amet() </code></pre> <p>这是一个AttributeError,因为<code>adipiscing.lorem_ipsum</code>现在不可用;模块不能仅仅通过导入包含的包就自动可用。在</p> <h3>导入模块,但从不使用其名称eh3> <pre class="lang-python prettyprint-override"><code># consecteur.py from . import adipiscing from .adipiscing import lorem_ipsum dolor = adipiscing.lorem_ipsum.dolor_sit_amet() </code></pre> <p>这次黑客攻击成功了,但是import语句<code>from .adipiscing import lorem_ipsum</code>声明我们将使用空的<code>lorem_ipsum</code>名称。在</p> <p>因为这不是真的,静态代码检查程序将(正确地)抱怨未使用的导入。我同意这些代码检查程序,所以我不想让警告保持沉默;我希望避免黑客攻击,同时仍然可以使用<code>adipiscing.lorem_ipsum</code>名称。在</p> <p>那么,我如何使用显式相对导入(explicit relative import)</strong>,<strong>而不使用未使用的导入(import)</strong>,如何使<code>adipiscing.lorem_ipsum</code>名称对代码可用?在</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>目前似乎没有办法使用Python导入系统来实现这一点。在</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
如何添加虚拟方法
1 回答
如何添加表示整数的擦边字符串?
7 回答
如何添加要在Bokeh中使用的新font.ttf文件?
9 回答
如何添加要显示的矩阵XY轴编号和XY轴
5 回答
如何添加计数?
5 回答
如何添加计数器函数?
6 回答
如何添加计数器列来计算数据帧中另一列中的特定值?
6 回答
如何添加计数器来跟踪while循环中的月份和年份?
1 回答
如何添加计数并删除countplot的顶部和右侧脊椎?
2 回答
如何添加计时器wx.应用程序更新窗口对象的主循环?
10 回答
如何添加评论到帖子?PostDetailVew,Django 2.1.5
2 回答
如何添加评论拉梅尔亚姆
9 回答
如何添加诸如矩阵Python/Pandas之类的数据帧?
4 回答
如何添加谷歌地点自动完成到Flask?
2 回答
如何添加超时、python discord bot
3 回答
如何添加超过1dp的检查
7 回答
如何添加距离方法
8 回答
如何添加跟随游戏的敌人精灵
7 回答
如何添加路径以便python可以找到程序?
4 回答
如何添加身份验证/安全性以使用happybase访问HBase?
2 回答