Python:导入与函数同名的模块

Python:导入与函数同名的模块,python,python-2.7,Python,Python 2.7,背景:第一次就SE提出问题。我对Python还是一个新手,一般来说对编程不是很有经验。我到处找了找,但还没有找到这个问题的答案,我非常感谢你的帮助 我的问题是:如何导入与函数同名的模块 具体来说,我正在使用Python 2.7使用Python符号数学库sympy 0.7.5 Sympy的结构如下: sympy | +-- __init__.py +-- simplify | +-- __init__.py +-- simplify.py

背景:第一次就SE提出问题。我对Python还是一个新手,一般来说对编程不是很有经验。我到处找了找,但还没有找到这个问题的答案,我非常感谢你的帮助

我的问题是:如何导入与函数同名的模块

具体来说,我正在使用Python 2.7使用Python符号数学库sympy 0.7.5

Sympy的结构如下:

sympy
 |
 +-- __init__.py
 +-- simplify
       |
       +-- __init__.py
       +-- simplify.py
       |      |       
       |      +-- def simplify(...)
       |
       +-- fu.py
            |
            +-- def TR8(...)
            +-- def fu(...)
我想做的是从这个结构中导入fu.py,以便调用TR8函数。然而,我运气不太好

这项工作:

from sympy.simplify.fu import *

TR8(some_expression)
到目前为止,这是我能够访问TR8的唯一方法,但我知道这不是推荐的方法

以下尝试失败:

from sympy.simplify import fu

fu.TR8(some_expression)
>>AttributeError: 'function' object has no attribute 'TR8'

from sympy import fu

fu.TR8(some_expression)
>>AttributeError: 'function' object has no attribute 'TR8'
我不确定,但在我看来Python认为我正在尝试导入名为fu的函数,而不是名为fu的模块。同样,当我这样尝试时:

import sympy.simplify.fu as fu
>>AttributeError: 'function' object has no attribute 'fu'
在这里,Python似乎认为我谈论的是函数sympy.simplify.simplify,而不是模块sympy.simplify

因此,当模块包含与模块同名的函数时,有没有合适的方法要求Python导入模块?

包含以下行:

from .fu import FU, fu
这将隐藏
fu
模块,方法是将
fu
函数分配到您期望模块的位置,并阻止大多数导入方法

如果您只需要TR8功能,可以导入:

from sympy.simplify.fu import TR8
如果您需要
fu
模块,则
sys.modules
中会保留一个条目:

import sympy.simplify.fu
import sys

fu_module = sys.modules['sympy.simplify.fu']

这很难看,但应该有用。据我所知,这是获取模块本身的最简单方法。

您也可以为模块使用名称空间

from simpy.simplify import fu as fu_module

那应该很好。

你不能从sympy.simplify.fu导入TR8中执行
吗?你根本不能从sympy导入fu中执行
!你确定你的代码就是你描述的那样吗?你有任何过时的.pyc文件吗?你能把一个实际的解释器会话复制粘贴到你的问题中,告诉我们失败的原因吗?您似乎重新键入了它,而不是复制粘贴,这是一种非常不可靠的方式。