【问题标题】:Custom code on pip uninstallpip卸载的自定义代码
【发布时间】:2015-08-21 15:13:40
【问题描述】:

我想在运行pip uninstall 时运行一些自定义代码,清理安装时创建的文件。我该怎么办?

我在 setup.py 中使用以下代码运行了自定义安装代码:

from setuptools import setup
from setuptools.command.install import install

class CustomInstallCommand(install):
  def run(self):
    #Custom code here
    install.run(self)
...
setup(
  ...
  cmdclass = {
    'install':CustomInstallCommand
  }
)

但尝试对 setuptools.command.uninstallfrom setuptools.command.install import uninstall 进行类似操作会失败,因为这些模块/名称不存在。

【问题讨论】:

  • 不应该通过卸载删除所有文件吗?请更详细地描述您要解决的确切问题。
  • 当然 - 我正在将 phantomjs 下载到一个临时目录以便能够使用它,因为据我所知,它只能通过 NodeJS (stackoverflow.com/a/15699761/1040915) 获得,而不是通过pip 依赖项?
  • @scubbo:在setup.py 中通常不鼓励这样做,因为它很脆弱并且依赖于平台并会导致问题。这主要是因为没有 Python 方法来表达本机依赖关系。相反,只需在 README 中记录本机依赖项安装说明。然而,Distutils 工作组正在处理这个问题:mail.python.org/pipermail/distutils-sig/2015-April/026114.html
  • 否则你会变成这样的恐怖:github.com/psycopg/psycopg2/blob/master/setup.py
  • 知道了。所以,如果我理解正确,没有批准/推荐的方式来为具有非 pip 依赖项的 python 模块提供“单命令安装”(例如,如果我想为非开发人员提供一个模块)?这令人失望。感谢您的链接,我会感兴趣地关注讨论。

标签: python pip setuptools setup.py


【解决方案1】:

正如其他人所说:出于安全原因,强烈建议不要这样做,即使您现在找到一种方法,也可能会破坏近距离功能。

这同样适用于 setup install 命令,而不仅仅是卸载命令。所以,请不要走这条路。

Python 打包(包括 pip)正朝着完全说明性的方向发展,无需运行托管包中的任何代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-27
    • 2011-08-10
    • 2012-07-22
    • 2010-10-21
    相关资源
    最近更新 更多