pip uninstall пространство имен подпакет

Как я могу удалить с помощью pip один из дистрибутивов, которые предоставляют подпакеты пакета пространства имен, не ломая программы, которые используют только подпакеты этого пакета пространства имен из оставшихся дистрибутивов?

У меня есть 2 дистрибутива (дистрибутив {1,2}), обеспечивающих 2 подпакета (package{1,2}) пакета пространства имен (namespace1):

distribution1 / namespace1 / __ init__.py:

from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)

distribution1 / namespace1 / package1 / __ init__.py:

from module1 import function1

distribution1 / namespace1 / package1 / module1.py:

def function1():
    pass

distribution1 / setup.py:

from setuptools import find_packages, setup

setup(
    name="distribution1",
    version="0.1",
    packages=find_packages())

distribution2 / namespace1 / __ init__.py:

from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)

distribution2 / namespace1 / package2 / __ init__.py:

from module2 import function2

distribution2 / namespace1 / package2 / module2.py:

def function2():
    pass

distribution2 / setup.py:

from setuptools import find_packages, setup

setup(
    name="distribution2",
    version="0.1",
    packages=find_packages())

И тестовая программа:

main.py:

from namespace1.package1 import function1

function1()

Когда я устанавливаю оба дистрибутива и удаляю один из них (distribution2), пример программы завершается неудачно:

% for i in distribution* ; do ( cd $i ; pip install . ) ; done   
Processing .../distribution1
Installing collected packages: distribution1
  Running setup.py install for distribution1
Successfully installed distribution1-0.1
Processing .../distribution2
Installing collected packages: distribution2
  Running setup.py install for distribution2
Successfully installed distribution2-0.1

% python main.py

% pip uninstall -y distribution2
Uninstalling distribution2-0.1:
  Successfully uninstalled distribution2-0.1

% python main.py                
Traceback (most recent call last):
  File "main.py", line 1, in <module>
    from namespace1.package1 import function1
ImportError: No module named namespace1.package1

Работает, когда "pip install --egg ." был использован в папке источника распространения. Но так как яйца считаются устаревшими в пользу колес, есть ли решение без этой опции - --egg?

Среда:

  • Python 2.7.9
  • setuptools 14.3.1
  • пип 6.1.1
  • колесо 0.24.0

0 ответов

Другие вопросы по тегам