防止 pip 缓存包
Prevent pip from caching a package
有没有办法告诉 pip 永远不要为我的包创建 wheel 缓存?
背景
我写了一个供内部使用的包,它在 setup.py
中使用 cmdclass
安装时设置了一些符号链接。如果我安装 sdist,这些 post-install 和 post-develop 触发器 运行 很好,但是如果我将包编译成一个轮子,它们就不会 运行。为了解决这个问题,我确保只将 sdist 上传到我们的内部 PyPI。
问题
According to the documentation,当 pip 从 sdist 安装时,它会将其编译为 wheel 并缓存以供下次使用。这意味着软件包第一次安装正确,但后续安装失败。
我知道我可以 运行 pip with --no-cache-dir
,但我想确保我团队中的每个人都能正确获取包,而不必添加这样的标志。没有人会想要这个包的轮子。
问题
我可以在我的包中设置一个设置或配置变量来告诉 pip 永远不要将它缓存为一个轮子吗?
据我所知,没有干净的方法。你可以抓住机会玩dirty.
受此 comment 的启发,您可以尝试使用看起来像这样的 setup.py
脚本(仅部分测试):
#!/usr/bin/env python3
import setuptools
setuptools.setup(
name='LookMaNoWheels',
version='1.2.3',
cmdclass={'bdist_wheel': None},
)
这个想法是在尝试构建轮子时强制失败。发生这种情况时,诸如 pip 之类的工具往往会通过直接从任何可用的发行版安装来从中恢复(在您的情况下是 sdist)。
更新
类似这样的内容有助于提供信息更丰富的错误消息:
#!/usr/bin/env python3
import distutils.errors
import setuptools
bdist_wheel = None
try:
import wheel.bdist_wheel
class bdist_wheel(wheel.bdist_wheel.bdist_wheel):
def run(self, *args, **kwargs):
raise distutils.errors.DistutilsClassError("No!")
except ModuleNotFoundError:
pass
setuptools.setup(
name='LookMaNoWheels',
version='1.2.3',
cmdclass={'bdist_wheel': bdist_wheel},
)
有没有办法告诉 pip 永远不要为我的包创建 wheel 缓存?
背景
我写了一个供内部使用的包,它在 setup.py
中使用 cmdclass
安装时设置了一些符号链接。如果我安装 sdist,这些 post-install 和 post-develop 触发器 运行 很好,但是如果我将包编译成一个轮子,它们就不会 运行。为了解决这个问题,我确保只将 sdist 上传到我们的内部 PyPI。
问题
According to the documentation,当 pip 从 sdist 安装时,它会将其编译为 wheel 并缓存以供下次使用。这意味着软件包第一次安装正确,但后续安装失败。
我知道我可以 运行 pip with --no-cache-dir
,但我想确保我团队中的每个人都能正确获取包,而不必添加这样的标志。没有人会想要这个包的轮子。
问题
我可以在我的包中设置一个设置或配置变量来告诉 pip 永远不要将它缓存为一个轮子吗?
据我所知,没有干净的方法。你可以抓住机会玩dirty.
受此 comment 的启发,您可以尝试使用看起来像这样的 setup.py
脚本(仅部分测试):
#!/usr/bin/env python3
import setuptools
setuptools.setup(
name='LookMaNoWheels',
version='1.2.3',
cmdclass={'bdist_wheel': None},
)
这个想法是在尝试构建轮子时强制失败。发生这种情况时,诸如 pip 之类的工具往往会通过直接从任何可用的发行版安装来从中恢复(在您的情况下是 sdist)。
更新
类似这样的内容有助于提供信息更丰富的错误消息:
#!/usr/bin/env python3
import distutils.errors
import setuptools
bdist_wheel = None
try:
import wheel.bdist_wheel
class bdist_wheel(wheel.bdist_wheel.bdist_wheel):
def run(self, *args, **kwargs):
raise distutils.errors.DistutilsClassError("No!")
except ModuleNotFoundError:
pass
setuptools.setup(
name='LookMaNoWheels',
version='1.2.3',
cmdclass={'bdist_wheel': bdist_wheel},
)