3

如何使用 pip 卸载提供命名空间包的子包的发行版之一,而不会破坏仅使用其余发行版中此命名空间包的子包的程序?

我有 2 个发行版 (distribution{1,2}),提供命名空间包 (namespace1) 的 2 个子包 (package{1,2}):

分布1/命名空间1/__init__.py:

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

分布1/命名空间1/package1/__init__.py:

from module1 import function1

分布1/命名空间1/package1/module1.py:

def function1():
    pass

分布1/setup.py:

from setuptools import find_packages, setup

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

分布2/命名空间1/__init__.py:

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

分布2/命名空间1/package2/__init__.py:

from module2 import function2

分布2/命名空间1/package2/module2.py:

def function2():
    pass

分布2/setup.py:

from setuptools import find_packages, setup

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

和一个测试程序:

主要.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
  • 安装工具 14.3.1
  • 点 6.1.1
  • 车轮 0.24.0
4

0 回答 0