[英]Importing system modules in python
背景:
我正在写一个针对pypy的符号包,用于表示表达式和获取派生词。 目前不进行简化或类似工作,仅进行差异化和评估。
题:
我正在编写表达式类来表示数学中的许多功能(sqrt,log,exp,sin,cos等)。 我已将其命名为math
要与您自然找到所述函数的模块重合的模块。 将来,我可能会对cmath
和其他具有特殊数学意义的模块进行同样的处理。 我的模块是更大的软件包ldb.algebra
一部分,因此名称math
不会与基本名称空间中的任何内容发生冲突。 但是,为了评估表达式,我将需要在ldb.algebra.math
模块内部导入系统math
模块,而我无法从我的math
模块内部(或与该模块处于同一级别的任何其他模块内部)进行导入包)。 到目前为止,这是我的基本路径:
ldb/
__init__.py - empty
algebra/
__init__.py - empty
math.py
以ldb / algebra / math.py的内容为例:
import math
my_sin = math.sin
显然不是很有用,但可以说明这一想法。 我正在使用python2(或者python2的pypy)。 我发现我可以通过创建一个子包,一个sys_math
的模块,在该模块中导入math
并公开必要的功能来解决此问题,但这看起来像是很多工作并且很麻烦。
所以我的问题是:我是否仍可以使用名为ldb.algebra.math
的模块来获得系统math
模块? 也许在__init__.py
文件中有一些有趣的事情,例如使模块_math然后以某种方式更改__init__.py
的名称,或者采用某种特殊的方式代替自己导入系统模块。
到目前为止,我的丑陋解决方案:
ldb/
algebra/
extra_package/
__init__.py - empty
sys_math.py
sys_math.py的内容:
import math
sin = math.sin
from __future__ import absolute_import
将其放在模块顶部可禁用隐式相对导入。 然后, import math
将导入内置的math
模块,如果要使用相对导入,则必须使用from . import math
语法来显式地进行它们from . import math
from . import math
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.