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']
2条答案
按热度按时间wz3gfoph1#
一般来说,模块和包都有一个
__file__
属性,你可以用它来找出它们是从哪里加载的:EDIT Nov 20 '20最初的答案可能会更有帮助,如果它提到
pip
通常会将软件包安装在(有时是虚拟的)环境的site-packages
目录中,但是-e
选项可以用于从目录或URL以所谓的 editable 模式安装模块或软件包。关于pip install --help
:这通常是通过克隆一个git存储库(大多数开源软件可以通过这种方式从Github或类似的来源访问),然后使用
pip install -e
安装它。环境的解释器将使用给定目录中的代码,这些代码被链接到环境的site-packages
目录中,而不是被复制到环境的site-packages
目录中。导入系统相当复杂,但是如果模块的
__file__
属性不能回答您的问题,请参阅与导入相关的模块属性的文档。EDIT Mar 27 '22对于软件包,问题稍微复杂一些。如果一个导入的对象有一个
__path__
属性,那么它就是一个包,而__path__
是一个(可能为空的)字符串的可迭代对象。这允许 * 命名空间包 *,其内容可以从不同的目录增量安装。为了帮助理解这一切,您可以创建一个简单的包,方法是创建一个目录,并在其中创建一个空的
module.py
文件和一个只包含空的__init__.py
的package
文件。我这样做了,并运行了以下脚本。下面是文件存储在执行后的样子--同时也展示了解释器如何为模块和包创建
.pyc
文件。0ejtzxu12#
site-packages
是手动构建的python包的目标目录。当您从源代码构建和安装python包时(使用distutils,可能是通过执行python setup.py install
),您将默认在site-pacakges中找到已安装的模块。如果你真的怀疑默认位置,