为什么 find_packages 行为取决于 pip 包的导入?
Why does find_packages behavior depend on import of pip package?
我有以下项目结构:
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 测试。 python3.5.
run1.py 输出:
$ python3 run1.py
prog
run2.py 输出:
$ python3 run2.py
prog
tests.subpak
即find_packages
在pip
之后导入时,不再排除排除包的子包。为什么会发生这种情况,这种奇怪的行为涉及什么样的机制?
编辑:
似乎 pip 或其某些依赖项正在更改 syspath,并且 setuptools
模块不同。运行 1:
<module 'setuptools' from '/usr/lib/python3/dist-packages/setuptools/__init__.py'>
第 2 轮:
<module 'setuptools' from '/usr/share/python-wheels/setuptools-20.10.1-py2.py3-none-any.whl/setuptools/__init__.py'>
pip
导入 wheel
支持,这似乎解锁了一个你不知道自己拥有的轮子:
<module 'setuptools' from '/usr/share/python-wheels/setuptools-20.10.1-py2.py3-none-any.whl/setuptools/__init__.py'>
没有轮子,您正在导入系统范围的 setuptools
版本:
<module 'setuptools' from '/usr/lib/python3/dist-packages/setuptools/__init__.py'>
此版本似乎已损坏,因为 应该包含 (通过将 'tests.*'
添加到 [=17= 来过滤掉它) ] 列表).
我有以下项目结构:
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 测试。 python3.5.
run1.py 输出:
$ python3 run1.py
prog
run2.py 输出:
$ python3 run2.py
prog
tests.subpak
即find_packages
在pip
之后导入时,不再排除排除包的子包。为什么会发生这种情况,这种奇怪的行为涉及什么样的机制?
编辑:
似乎 pip 或其某些依赖项正在更改 syspath,并且 setuptools
模块不同。运行 1:
<module 'setuptools' from '/usr/lib/python3/dist-packages/setuptools/__init__.py'>
第 2 轮:
<module 'setuptools' from '/usr/share/python-wheels/setuptools-20.10.1-py2.py3-none-any.whl/setuptools/__init__.py'>
pip
导入 wheel
支持,这似乎解锁了一个你不知道自己拥有的轮子:
<module 'setuptools' from '/usr/share/python-wheels/setuptools-20.10.1-py2.py3-none-any.whl/setuptools/__init__.py'>
没有轮子,您正在导入系统范围的 setuptools
版本:
<module 'setuptools' from '/usr/lib/python3/dist-packages/setuptools/__init__.py'>
此版本似乎已损坏,因为 应该包含 (通过将 'tests.*'
添加到 [=17= 来过滤掉它) ] 列表).