我正在尝试调试*nspkg.pth
文件的复杂情况
创建一个内置包,用于在uwsgi进程中强制导入。
在这种情况下,我仍在使用Python2.7。
为了确保包装正确,我开始使用"几乎是空的"一
(其内容如下所示)我有这种行为:
如果我使用python setup.py install
安装,如果我,那就没关系
使用pip
安装命名空间似乎是内置的:
setup(
name='jmb.vega',
namespace_packages=['jmb'],
version="0.1",
description='Test package',
author='Alessandro Dentella',
packages=find_packages(exclude=['tests', 'tests.*']),
platforms='any',
zip_safe=False,
install_requires=[
'setuptools',
],
)
虽然jmb中的 init 是:
sandro@bluff:/tmp/jmb.vega$ cat jmb/__init__.py
__import__('pkg_resources').declare_namespace(__name__)
配置有什么问题? 为什么pip使它成为内置包?
root@argo-stretch:/tmp/jmb.vega# python setup.py install
...
root@argo-stretch:/tmp/jmb.vega# python -c 'import jmb; print(jmb)'
<module 'jmb' from '/usr/local/lib/python2.7/dist-packages/jmb.vega-0.1-py2.7.egg/jmb/__init__.pyc'>
在这种情况下,文件&#39; jmb.vega-0.1-nspkg.pth&#39;没有创建 然后将鸡蛋加入&#39; easy-install.pth&#39;
使用pip进行安装时
root@argo-stretch:/tmp/jmb.vega# pip install .
Processing /tmp/jmb.vega
Requirement already satisfied: setuptools in /usr/lib/python2.7/dist-packages (from jmb.vega==0.1)
Installing collected packages: jmb.vega
Running setup.py install for jmb.vega ... done
Successfully installed jmb.vega-0.1
文件&#39; jmb.tools-0.7-py2.7-nspkg.pth&#39;是创建和模块 似乎是一个内置的
root@argo-stretch:/tmp/jmb.vega# (cd ; python -c 'import jmb; print(jmb)')
<module 'jmb' (built-in)>
在实际案例中,这应该打破任何进口系统 致电命名空间&#39; jmb&#39;。
测试包是
jmb.vega/
├── jmb
│ ├── __init__.py
│ └── vega
│ └── __init__.py
└── setup.py
sandro @blaff:/tmp/jmb.vega$ cat setup.py 来自setuptools导入设置,find_packages
答案 0 :(得分:1)
它不是内置的。你所看到的是正常的。 Python 2上的模块类型__repr__
just thinks any module object without a __file__
is built-in:
filename = PyModule_GetFilename((PyObject *)m);
if (filename == NULL) {
PyErr_Clear();
return PyString_FromFormat("<module '%s' (built-in)>", name);
}
命名空间包没有__file__
。