将python包折叠为单个模块。

amalgamate的Python项目详细描述


进口

代码合并器的工作方式是其他模块 同一包装(并合并)的货物应从进口货物中进口, 没有 as 子句。例如,假设 z 是 package pkg ,这取决于同一个包中的 x y Z 应该只使用以下类型的导入:

from pkg.x import a, c, d
from pkg.y import e, f, g

这些来自导入的模块模拟所有具有 相同的 globals() 。 这是因为合并器将所有这样的模块放在同一个globals()中, 这实际上就是进口商品的作用。例如, xonsh.ast xonsh.execer 都在同一个包中( xonsh )。因此他们应该使用 以上来自导入语法。

或者,对于当前包之外的模块(或 import语句应该是 import pkg.x 导入pkg.x作为名称 。这是因为只有在这些情况下 合并器能够以保证的方式自动插入惰性导入 为了安全。假设我们回到 z 并且依赖于 dep 集合。 以及子包中的模块。以下都是可以接受的:

import dep
import collections.abc as abc
import pkg.dep.mod0
import pkg.dep.mod1 as mod1

这里最重要的是要对所有这些进口保持一致 包中的模块

警告: 对于模块,不应使用pkg.i import j中的 格式 在合并包之外。这是因为模棱两可 来自pkg.x import name 可能会导入一个不能惰性构造的变量 或者可以导入模块。合并者被迫留下这样的进口声明 正如他们所写的,这意味着他们不能自动地懒惰或 被淘汰了。因此,当 .py 是 导入的/

所以要遵循的简单规则是:

  1. 使用from import直接从同一包中的模块导入对象,
  2. 通过直接导入从包外部的模块导入对象 或导入为语句。
  3. < > >

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java使用split函数分割字符串,但没有得到期望的结果   未找到包含derby数据库嵌入架构的sql Java桌面应用程序错误   java elasticsearch vs solr用于定制全文搜索系统   java Android:创建没有startOffset的动画延迟?   java如何查看其他应用程序接收的数据?   java如何在Linux中使用D和classpath选项运行jar文件   java和域设计最佳实践   具有相同内存位置的java数组,将显示为输出   连接到java中的elasticsearch?   Java Playframework重定向到带有Json负载的外部url   java无法在Android平台上使用InputStream为蓝牙socket创建ObjectInputStream   使用POI将Excel日期转换为Java日期,年份未正确显示   oracle从数据库层还是Java层调用webservice?