从 Ubuntu 中的 pip 安装包中找到源代码
Locate source code from pip install packages in Ubuntu
我在 Ubuntu 中用 pip 安装了一些软件包。但是,我想从这些包中更改部分已安装代码。在 windows 中很容易做到这一点,从 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'
编辑 20 年 11 月 20 日 如果提到 pip
通常在(有时是虚拟的)环境的 [=16] 中安装软件包,原始答案可能会更有帮助=] 目录,但 -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.
上的文档
编辑 22 年 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
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']
我在 Ubuntu 中用 pip 安装了一些软件包。但是,我想从这些包中更改部分已安装代码。在 windows 中很容易做到这一点,从 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'
编辑 20 年 11 月 20 日 如果提到 pip
通常在(有时是虚拟的)环境的 [=16] 中安装软件包,原始答案可能会更有帮助=] 目录,但 -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.
编辑 22 年 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
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']