【问题标题】:python setup.py - how to show message after installpython setup.py - 如何在安装后显示消息
【发布时间】:2016-12-20 09:05:58
【问题描述】:

我正在开发一个 PyQt5 应用程序并通过 pip install 提供它,现在 python3 中的 pip 可以安装 pyqt5 作为依赖项。我创建了一个入口点来启动我的包,并告诉 setup.py 它是一个 gui_scripts。

我现在想做的是,在用户输入pip install package 并且安装完成后,向用户显示一条消息,告诉您现在可以在终端中输入package 以加载应用程序。这样做的正确方法是什么?还是我不应该这样做?

【问题讨论】:

标签: python python-3.x setup.py


【解决方案1】:

如果你能保证

  • 始终从源代码分发包安装软件包,而不是二进制轮,并且
  • 用户将-v 选项用于pip install

您可以在 setup.py 脚本中输出文本。

setup.py 几乎是一个普通的 Python 脚本。 只需在 setup.py 文件末尾使用 print() 函数即可。 在本例中,文件结构为somedir/setup.pysomedir/test/test/__init__.py

简单的解决方案

from setuptools import setup

print("Started!")

setup(name='testing',
      version='0.1',
      description='The simplest setup in the world',
      classifiers=[
        'Development Status :: 3 - Alpha',
        'License :: OSI Approved :: MIT License',
        'Programming Language :: Python :: 3.0',
      ],
      keywords='setup',
      author='someone',
      author_email='someone@example.com',
      license='MIT',
      packages=['test'],
      entry_points={
      },
      zip_safe=False)

print("Finished!")

开始了!
运行安装
运行 bdist_egg
运行 egg_info
编写 testing.egg-info/PKG-INFO
...
...
...
测试的处理依赖==0.1
完成处理 测试依赖项==0.1
完成!

使用setuptools.command.install解决方案

此外,您可以将setuptools.command.install 命令子类化。在全新设置中更改install.run(self)os.system("cat testing.egg-info/PKG-INFO") 的顺序时检查差异。

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


class PostInstallCommand(install):
    """Post-installation for installation mode."""
    def run(self):
        install.run(self)
        os.system("cat testing.egg-info/PKG-INFO")


setup(name='testing',
      version='0.1',
      description='The simplest setup in the world',
      classifiers=[
        'Development Status :: 3 - Alpha',
        'License :: OSI Approved :: MIT License',
        'Programming Language :: Python :: 3.0',
      ],
      keywords='setup',
      author='someone',
      author_email='someone@example.com',
      license='MIT',
      packages=['test'],
      entry_points={
      },
      cmdclass={
        'install': PostInstallCommand,
      },
      zip_safe=False)

【讨论】:

  • 令人讨厌的是,pip 会吞噬这些自定义消息,除非您使用 -v 或类似的方式运行它。任务有效,但您看不到消息。
  • 另外,我还没有找到一种方法来使用 pip 安装轮进行这项工作。它们不会在安装时“运行”setup.py - 仅在打包到 .whl 时。
【解决方案2】:

另一个选项是日志模块。

rasterio 例如使用这样的方法,您可以根据自己的需要进行调整:

import logging
import sys

logging.basicConfig(stream=sys.stderr, level=logging.INFO)
log = logging.getLogger()

...

log.info("Your message")

sys.stderr 将被 pip 打印出来。

【讨论】:

    猜你喜欢
    • 2011-05-10
    • 1970-01-01
    • 2014-03-02
    • 1970-01-01
    • 2017-08-12
    • 2016-12-05
    • 2015-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多