为什么在安装包时有时会创建 .pth 文件?
Why a .pth file is created sometime on package installation?
有时,当我安装一个包时,我会注意到在 site-packages 目录中创建了一个与包代码相同级别的 .pth 文件。例如,如果我执行
pip install DjangoDevKit
我可以在站点包目录中看到:
djangodevkit (a directory)
DjangoDevKit-1.0.7.dist-info (a directory)
DjangoDevKit-1.0.7-py3.5-nspkg.pth
.pth 文件包含:
import sys, types, os;p = os.path.join(sys._getframe(1).f_locals['sitedir'], *('djangodevkit',));ie = os.path.exists(os.path.join(p,'__init__.py'));m = not ie and sys.modules.setdefault('djangodevkit', types.ModuleType('djangodevkit'));mp = (m or []) and m.__dict__.setdefault('__path__',[]);(p not in mp) and mp.append(p)
这个 DjangoDevKit-1.0.7-py3.5-nspkg.pth
是如何创建的?
setup.py 并没有告诉创建这样一个 .pth 文件。我搜索了代码,但没有明显的内容。
你有想法吗?
DjangoDevKit 是 a namespace package. That's why setuptools
created *_nspkg.pth
。
见https://whosebug.com/search?q=%5Bpython%5D+namespace+package
有时,当我安装一个包时,我会注意到在 site-packages 目录中创建了一个与包代码相同级别的 .pth 文件。例如,如果我执行
pip install DjangoDevKit
我可以在站点包目录中看到:
djangodevkit (a directory)
DjangoDevKit-1.0.7.dist-info (a directory)
DjangoDevKit-1.0.7-py3.5-nspkg.pth
.pth 文件包含:
import sys, types, os;p = os.path.join(sys._getframe(1).f_locals['sitedir'], *('djangodevkit',));ie = os.path.exists(os.path.join(p,'__init__.py'));m = not ie and sys.modules.setdefault('djangodevkit', types.ModuleType('djangodevkit'));mp = (m or []) and m.__dict__.setdefault('__path__',[]);(p not in mp) and mp.append(p)
这个 DjangoDevKit-1.0.7-py3.5-nspkg.pth
是如何创建的?
setup.py 并没有告诉创建这样一个 .pth 文件。我搜索了代码,但没有明显的内容。
你有想法吗?
DjangoDevKit 是 a namespace package. That's why setuptools
created *_nspkg.pth
。
见https://whosebug.com/search?q=%5Bpython%5D+namespace+package