繁体   English   中英

在python中导入系统模块

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM