从 Ubuntu 中的 pip install 包中找到源代码

Posted

技术标签:

【中文标题】从 Ubuntu 中的 pip install 包中找到源代码【英文标题】:Locate source code from pip install packages in Ubuntu 【发布时间】:2017-12-30 03:39:23 【问题描述】:

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

from metric_learn import LSML_Supervised

【问题讨论】:

可以导入包,然后运行package.__file__获取位置。 【参考方案1】:

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

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

编辑 20 年 11 月 20 日 如果提到 pip 通常在(有时是虚拟的)环境的 site-packages 目录中安装软件包,但 @987654326 @ 选项可用于从目录或 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 上的文档。

【讨论】:

我的代码来自 metric_learn import LSML_Supervised。当我尝试打印 LSML_Supervised 时,我得到了 file 属性对我不起作用:AttributeError: type object 'LSML_Supervised' has no attribute 'file'【参考方案2】:

site-packages是手动构建python包的目标目录。当你从源代码构建和安装python包时(使用distutils,可能通过执行python setup.py install),你会默认在site-pacakges中找到已安装的模块。

>>> import site; site.getsitepackages()
['/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']

如果你真的怀疑默认位置,那么,

>>> import django
>>> print django.__path__
['/Library/Python/2.7/site-packages/django']

【讨论】:

我的代码如下来自 metric_learn import LSML_Supervised。不知道我应该为 path 准备什么 好像python2.7中不存在path属性

以上是关于从 Ubuntu 中的 pip install 包中找到源代码的主要内容,如果未能解决你的问题,请参考以下文章

无法找到包 python-pip Ubuntu 20.04

python pip 安装包 记录 ubuntu and windows

ubuntu install pip

ubuntu更换pip install,apt-get,conda install 成国内源

Python pip包管理

Ubuntu14.04LTS上安装Pip