如何找到 Python 模块源的位置?[重复]

2025-02-12 10:03:00
admin
原创
65
摘要:问题描述:如何了解给定 Python 模块的源文件安装在哪里?Windows 和 Linux 上的方法是否不同?我正在尝试寻找该datetime模块的具体来源,但我也对更一般的答案感兴趣。解决方案 1:对于纯 Python 模块,您可以通过查看来找到源代码themodule.__file__。但是,datet...

问题描述:

如何了解给定 Python 模块的源文件安装在哪里?Windows 和 Linux 上的方法是否不同?

我正在尝试寻找该datetime模块的具体来源,但我也对更一般的答案感兴趣。


解决方案 1:

对于纯 Python 模块,您可以通过查看来找到源代码themodule.__file__。但是,datetime 模块是用 C 编写的,因此datetime.__file__指向 .so 文件(Windows 上没有datetime.__file__),因此您看不到源代码。

如果您下载 python 源代码 tarball 并解压它,则可以在Modules子目录中找到模块的代码。

例如,如果你想找到 Python 2.6 的日期时间代码,你可以查看

Python-2.6/Modules/datetimemodule.c

您还可以在 github 上找到该文件的最新版本,网址为
https://github.com/python/cpython/blob/main/Modules/_datetimemodule.c

解决方案 2:

python -v从命令行运行应该会告诉您正在导入什么以及从哪里导入。这在 Windows 和 Mac OS X 上对我都有效。

C:>python -v
# installing zipimport hook
import zipimport # builtin
# installed zipimport hook
# C:Python24libsite.pyc has bad mtime
import site # from C:Python24libsite.py
# wrote C:Python24libsite.pyc
# C:Python24libos.pyc has bad mtime
import os # from C:Python24libos.py
# wrote C:Python24libos.pyc
import nt # builtin
# C:Python24lib
tpath.pyc has bad mtime
...

我不确定我安装的那些坏的 mtime 是什么!

解决方案 3:

我意识到这个答案晚了4年,但是现有的答案正在误导人们。

正确的做法是永远不要这样做__file__,或者尝试自己浏览sys.path并搜索等等(除非您需要向后兼容 2.1 以外的版本)。

它是inspect模块—特别是,getfile或者getsourcefile

除非您想学习和实施规则(对于 CPython 2.x,这些规则已记录在案,但很痛苦,而对于其他实现或 3.x,根本没有记录)以映射.pyc到文件;处理 .zip 档案、eggs 和模块包;尝试不同的方法来获取不支持的/文件.py的路径;弄清楚 Jython/IronPython/PyPy 的作用;等等。在这种情况下,去做吧。.so`.pyd`__file__

同时,每个 Python 版本(从 2.0 开始)的源代码都可以在线获取http://hg.python.org/cpython/file/X.Y/(例如2.7或3.3)。因此,一旦您发现inspect.getfile(datetime).so.pyd类似的文件/usr/local/lib/python2.7/lib-dynload/datetime.so,您就可以在 Modules 目录中查找它。严格来说,无法确定哪个文件定义了哪个模块,但几乎所有文件都是foo.cfoomodule.c,因此不难猜出datetimemodule.c就是您想要的。

解决方案 4:

如果您使用 pip 安装模块,则pip show $module只会返回位置。

解决方案 5:

sys.path列表包含在运行时搜索模块的目录列表:

python -v
>>> import sys
>>> sys.path
['', '/usr/local/lib/python25.zip', '/usr/local/lib/python2.5', ... ]

解决方案 6:

从标准库尝试imp.find_module

>>> import imp
>>> imp.find_module('fontTools')
(None, 'C:\\Python27\\lib\\site-packages\\FontTools\\fontTools', ('', '', 5))
>>> imp.find_module('datetime')
(None, 'datetime', ('', '', 6))

解决方案 7:

datetime是一个内置模块,因此没有(Python)源文件。

对于来自.py(或.pyc)文件的模块,您可以使用mymodule.__file__,例如

> import random
> random.__file__
'C:\\Python25\\lib\\random.pyc'

解决方案 8:

下面是获取模块文件名的一行程序,适用于 shell 别名:

echo 'import sys; t=__import__(sys.argv[1],fromlist=[\".\"]); print(t.__file__)'  | python - 

设置为别名:

alias getpmpath="echo 'import sys; t=__import__(sys.argv[1],fromlist=[\".\"]); print(t.__file__)'  | python - "

使用方法:

$ getpmpath twisted
/usr/lib64/python2.6/site-packages/twisted/__init__.pyc
$ getpmpath twisted.web
/usr/lib64/python2.6/site-packages/twisted/web/__init__.pyc

解决方案 9:

在 Python 解释器中,您可以导入特定模块,然后键入 help(module)。这将提供名称、文件、模块文档、说明等详细信息。

前任:

import os

help(os)


Help on module os:

NAME

os - OS routines for Mac, NT, or Posix depending on what system we're on.

FILE

/usr/lib/python2.6/os.py

MODULE DOCS

http://docs.python.org/library/os

DESCRIPTION

This exports:

- all functions from posix, nt, os2, or ce, e.g. unlink, stat, etc.

- os.path is one of the modules posixpath, or ntpath

- os.name is 'posix', 'nt', 'os2', 'ce' or 'riscos'

等人

解决方案 10:

在windows上,你可以找到python模块的位置,如下所示:即找到rest_framework模块
在此处输入图片描述

解决方案 11:

Python 3.2 中的新功能,您现在可以使用code_info()dis 模块:
http: //docs.python.org/dev/whatsnew/3.2.html#dis

解决方案 12:

查看这个漂亮的“cdp”命令,以 cd 到包含指示 Python 模块源的目录:

cdp () {
  cd "$(python -c "import os.path as _, ${1}; \n    print _.dirname(_.realpath(${1}.__file__[:-1]))"
  )"
}

解决方案 13:

只是更新答案以防现在有人需要它,我在 Python 3.9 中使用 Pip 来管理包。只需使用pip show,例如:

pip show numpy

它将为您提供 pip 存储所有其他包的位置的所有详细信息。

解决方案 14:

另一种方法是从终端检查是否安装了多个 Python 版本。

$ python3 -m pip show pyperclip

位置:/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-

$ python -m pip show pyperclip

位置:/Users/umeshvuyyuru/Library/Python/2.7/lib/python/site-packages

解决方案 15:

例如,在 Ubuntu 12.04 上,可以在以下位置找到适用于 python2 的 numpy 包:

/usr/lib/python2.7/dist-packages/numpy

当然,这不是一般的答案

解决方案 16:

您可以根据需要在 pyCharm 或其他编辑器上运行它

import module_name

print(module_name)

这将显示您的模块的位置。

解决方案 17:

并非所有 Python 模块都是用 Python 编写的。Datetime 恰好是其中之一,并且(在 Linux 上)是 datetime.so。

您必须下载源代码到 Python 标准库才能获取它。

解决方案 18:

对于那些喜欢 GUI 解决方案的人:如果您使用 Spyder 等 GUI(Anaconda 安装的一部分),您只需右键单击模块名称(例如“import csv”中的“csv”)并选择“转到定义” - 这将打开文件,但在顶部您还可以看到确切的文件位置(“C:....csv.py”)

解决方案 19:

如果您不使用解释器,那么您可以运行以下代码:

import site
print (site.getsitepackages())

输出:

['C:\\Users\\<your username>\\AppData\\Local\\Programs\\Python\\Python37', 'C:\\Users\\<your username>\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages']

Array 中的第二个元素将是您的包裹位置。在本例中:

C:Users<your username>AppDataLocalProgramsPythonPython37libsite-packages

解决方案 20:

受到这个答案的启发。

利用grepawk工具。我发现这在 bash shell 中有效。

pip show <any-installed-package> | grep Location | awk -F': ' '{print $2}'

这个想法是在结果中过滤模块路径。

$pip show pygments
Name: Pygments
Version: 2.16.1
Summary: Pygments is a syntax highlighting package written in Python.
Home-page: None
Author: None
Author-email: Georg Brandl <georg@python.org>
License: BSD-2-Clause
Location: $USER/.local/lib/python3.8/site-packages
Requires:

解决方案 21:

在 Spyder 等 IDE 中,导入模块,然后单独运行模块。
在此处输入图像描述

解决方案 22:

正如上面在 python 中写的那样,只需使用 help(module) 即

进口部分

帮助(分数)

如果你的模块(例如分数)已安装,那么它会告诉你它的位置和相关信息,如果没有安装,它会说模块不可用

如果它不可用,则默认情况下它不会随 python 一起提供,在这种情况下,您可以检查在哪里找到它的下载信息

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2545  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1551  
  建筑工程全生命周期涉及从项目规划、设计、施工到运营维护等多个复杂阶段,每个阶段都产生和依赖大量信息。PLM(产品生命周期管理)系统作为一种整合数据、流程和人员的数字化解决方案,正逐渐成为建筑行业实现高效协同与可持续发展的关键支撑。通过数字化转型,PLM系统能够优化各阶段的工作流程,提升项目整体质量和效率,为建筑工程的全...
plm是什么软件   1  
  产品生命周期管理(PLM)系统在企业资源成本率优化方面发挥着至关重要的作用。通过构建有效的数据模型,PLM系统能够整合企业各个环节的数据,为资源成本的精准分析和优化提供有力支持。这不仅有助于企业降低成本,还能提升产品质量和市场竞争力。PLM系统概述PLM系统是一种用于管理产品从概念设计到退役全生命周期过程中所有信息和流...
PLM项目管理软件   1  
  产品生命周期管理(PLM)系统在现代企业的产品研发、生产与管理过程中扮演着至关重要的角色。它整合了从产品概念设计到产品退役的全生命周期数据与流程,助力企业提升效率、降低成本并增强创新能力。随着技术的不断发展,到 2025 年,PLM 系统将具备一系列核心功能模块,这些模块将深度影响企业的运营与发展。产品数据管理模块产品...
plm是什么意思   0  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用