gpt4 book ai didi

python - 获取 Python 类或函数的导入方式

转载 作者:行者123 更新时间:2023-12-01 04:47:34 26 4
gpt4 key购买 nike

如何弄清楚类或函数是如何在 python 中导入的?我知道 __module__ 存在,但这并不总是有效。 __module__ 失败的示例:

>>> from os.path import join
>>> join.__module__
'ntpath'

在该示例中,我想要获取os.pathntpath 是定义函数的位置,而不是我从中导入函数的包。

编辑:

具体来说,我想要获取os.path而不是ntpath的原因是因为os.path是平台独立的,而ntpath 仅存在于 Windows 上。类似地,在 *nix 系统上,os.path 是使用 posixpath 实现的。如果没有人能给我一个可靠的方法来解决这个问题,我想一个可以接受的替代品是某种我可以使用的映射,它从实现模块映射回跨平台模块。 IE,启动它看起来像这样:

{
'nt' : 'os',
'ntpath' : 'os.path',
'posixpath': 'os.path',

}

我只需要标准 Python 安装(特别是 2.7)中的模块。

第二次编辑:

我想让写这样的东西成为可能:

from pyRemote import Remote  # The module I'm writing
from os.path import join

remote = Remote(hostname, username, password)
pathOnRemoteMachine = remote.join(component1, component2)

为了实现此目的,Remote 通过在调用命名空间中查找属性名称(使用 inspect 中的一些方法)来实现 __getattr__。它发现在调用命名空间中 join 是一个函数。它需要知道可以从哪里导入join,以便它可以告诉远程Python实例导入相同的函数。由于本地 Python 实例可以在与远程 Python 实例不同的操作系统上运行(IE,本地可以是 Windows,而远程可以是 RedHat),我不希望实现特定模块(ntpath在这种情况下) - 我想要跨平台模块(在这种情况下是os.path)。

我还将通过告诉远程计算机首先从 pip 下载模块来处理需要从 pip 导入的场景,或者需要通过复制该文件来从用户编写的文件导入的场景文件结束。

因此,提供一种使用本地 Python 实例控制远程 Python 实例的非常优雅(IMO)的方法需要大量的魔法和技巧。

最佳答案

您可以索引到 sys.modules,例如

>>> import sys
>>> from os.path import join
>>> sys.modules[join.__module__]
"<path/posixpath.pyc>"

但是,这只会为您提供实际的模块,而不是您引用的名称,例如(操作系统路径)。不确定如何才能知道函数是如何导入的,以及它是在哪里定义的。

关于python - 获取 Python 类或函数的导入方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29108334/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com