我有以下項目結構:爲什麼find_packages行爲依賴於pip包的導入?
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
即,當find_packages
被pip
後導入,它不再排除排除包的子包。爲什麼會發生這種情況,以及這種特殊行爲涉及什麼樣的機制?
編輯: 似乎pip或其某些依賴關係正在改變syspath,並且setuptools
模塊是不同的。 RUN1:
<module 'setuptools' from '/usr/lib/python3/dist-packages/setuptools/__init__.py'>
RUN2:
<module 'setuptools' from '/usr/share/python-wheels/setuptools-20.10.1-py2.py3-none-any.whl/setuptools/__init__.py'>
愚蠢的問題:你爲什麼首先要輸入'pip'? –
@MartijnPieters上面的代碼與實際setup.py腳本,這使得一些畫中畫功能,使用工作,而我遇到的問題的演示:'從pip.req進口parse_requirements' – DarkPhoenix
什麼pip'的'版本,什麼版本的' setuptools'?我不能用8.1.2和setuptools 27.2.0來重現這一點。我得到了第二個輸出*。 –