我有以下项目结构:
prog
__init__.py
tests
subpak
__init__.py
__init__.py
run1.py
run2.py
run1.py:
#!/usr/bin/env python3
from setuptools import find_packages
for i in sorted(find_packages(exclude=['tests'])):
print(i)
run2.py:
#!/usr/bin/env python3
import pip
from setuptools import find_packages
for i in sorted(find_packages(exclude=['tests'])):
print(i)
其余文件都是空的.环境 – Debian测试. python 3.5.
run1.py输出:
$python3 run1.py
prog
run2.py输出:
$python3 run2.py
prog
tests.subpak
也就是说,当在pip之后导入find_packages时,它不再排除被排除的包的子包.为什么会发生这种特殊行为?这种特殊行为涉及哪种机制?
编辑:
看来pip或其某些依赖项正在改变syspath,而setuptools模块则不同. RUN1:
RUN2: