为什么pip会执行两次setup.py?

oar*_*ish 4 python pip setuptools

考虑一个非常简单的setup.py

from setuptools import setup, find_packages

print('WAAAAAAAAA') # executed twice!

setup(
    name="foo",
    version="190425",
    description="bar",
    author="Developers",
    author_email="me@domain.com",
    install_requires=["pyzmq", "pybullet"],
    packages=find_packages(),
)
Run Code Online (Sandbox Code Playgroud)

为什么模块在运行时加载两次pip install . -v?我可以做些什么来保护代码,以便它每次调用只运行一次pip,就像setup()

oar*_*ish 5

答案是pip install .执行setup.py两次(详细输出实际上说明了这一点),因为它先执行子egg_info命令,然后执行子install命令。

一个可能的解决方案是检查是否sys.argv[1] == 'install'且仅然后执行所需的内容。