gpt4 book ai didi

python - 在 Ubuntu 中从 pip 安装包中找到源代码

转载 作者:太空宇宙 更新时间:2023-11-03 16:45:30 27 4
gpt4 key购买 nike

我在 Ubuntu 中用 pip 安装了一些包。但是,我想从这些包中更改部分已安装代码。在 Windows 中很容易做到这一 pip ,从 Pycharm 使用提供的链接。如何从包中找到源代码并进行更改?我的导入代码:

from metric_learn import LSML_Supervised

最佳答案

一般来说,模块和包都有一个 __file__ 属性,您可以使用该属性找出它们的加载位置:

>>> import jinja2
>>> jinja2.__file__
'/usr/local/anaconda3/envs/felix_backend/lib/python3.6/site-packages/jinja2/__init__.py'

EDIT Nov 20 '20 如果提到 pip 通常在(有时是虚拟的)环境的 site- 中安装包,原始答案可能会更有帮助packages 目录,但 -e 选项可用于从目录或 URL 以所谓的 editable 模式安装模块或包。来自 pip install --help:

  -e, --editable <path/url>   Install a project in editable mode (i.e.
setuptools "develop mode") from a local project
path or a VCS url.

这通常通过克隆一个 git 存储库(大多数开源软件可以从 Github 或类似来源以这种方式访问​​)然后使用 pip install -e 安装它来使用。环境的解释器将使用给定目录中的代码,这些代码被链接而不是被复制到环境的 site-packages 目录中。

导入系统相当复杂,但如果模块的 __file__ 属性没有回答您的问题,请参阅 import-related module attributes 上的文档。 .

编辑 2022 年 3 月 27 日 对于包,问题稍微复杂一些。如果导入的对象具有 __path__ 属性,则它是一个包,而 __path__ 是一个(可能为空)可迭代的字符串。这允许 namespace packages ,其内容可以从不同的目录增量安装。

为了帮助理解所有这些,您可以通过创建一个目录来创建一个简单的包,并在其中创建一个空的 module.py 文件和一个 package 子目录仅包含一个空的 __init__.py。我这样做了,并运行了以下脚本。

sholden@fathead-2 pkgtest % python
Python 3.9.10 (main, Jan 15 2022, 11:48:00)
[Clang 13.0.0 (clang-1300.0.29.3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import module, package
>>> module.__file__
'/private/tmp/pkgtest/module.py'
>>> package.__path__
['/private/tmp/pkgtest/package']

这是执行后文件存储的样子 - 还显示了解释器如何为模块和包创建 .pyc 文件。

sholden@fathead-2 pkgtest % tree $(pwd)
/tmp/pkgtest
├── __pycache__
│   └── module.cpython-39.pyc
├── module.py
└── package
├── __init__.py
└── __pycache__
└── __init__.cpython-39.pyc

3 directories, 4 files

关于python - 在 Ubuntu 中从 pip 安装包中找到源代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45282501/

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