簡體   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