簡體   English   中英

pip安裝的名稱空間變成內置的

[英]pip installed namespace turns into a builtin

我正在嘗試調試一個復雜的情況,其中一個*nspkg.pth文件創建了一個內置軟件包,該軟件包在*nspkg.pth了導入。

在這種情況下,我仍在使用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中的初始化是:

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'>

在這種情況下,不會創建文件“ jmb.vega-0.1-nspkg.pth”,並且將雞蛋添加到“ easy-install.pth”

使用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

文件'jmb.tools-0.7-py2.7-nspkg.pth'已創建,並且模塊似乎是內置的

root@argo-stretch:/tmp/jmb.vega# (cd ; python -c 'import jmb; print(jmb)')
   <module 'jmb' (built-in)>

在實際情況下,這足以破壞對名稱空間“ jmb”的任何調用的導入系統。

測試包是

  jmb.vega/
   ├── jmb
   │   ├── __init__.py
   │   └── vega
   │       └── __init__.py
   └── setup.py

sandro @ bluff:/tmp/jmb.vega$來自setuptools導入安裝程序find_packages的cat setup.py

它不是內置的。 您看到的是正常現象。 模塊類型的__repr__ 只是認為沒有__file__任何模塊對象都是內置的 ,在Python 2上:

filename = PyModule_GetFilename((PyObject *)m);
if (filename == NULL) {
    PyErr_Clear();
    return PyString_FromFormat("<module '%s' (built-in)>", name);
}

命名空間包沒有__file__

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM