Выполнить задание после установки с помощью pip - PullRequest
1 голос
/ 07 июня 2019

Моя древовидная структура проекта

.
├── example.gif
├── funmotd
│   ├── config.json
│   ├── __init__.py
│   └── quotes_db.py
├── LICENSE
├── README.md
└── setup.py

setup.py (Удален некоторый код, чтобы иметь меньше кода)

import sys
import os
import setuptools
from setuptools.command.install import install

class PostInstall(install):
    def run(self):
        mode = 0o666
        bashrc_file = os.path.join(os.path.expanduser('~'), ".bashrc")
        install.run(self)
        # Added CLI to .bashrc
        # Change "config.json" file permission


setuptools.setup(
      ...
      entry_points={'console_scripts': ['funmotd = funmotd:main']},
      package_dir={'funmotd': 'funmotd/'},
      package_data={'funmotd': ['config.json'], },
      include_package_data=True,
      python_requires=">=3.4",
      cmdclass={'install': PostInstall, },
      ...      
)

При запуске PostInstall выполняется нормально python3 setup.py install.Итак, загружено в Pypi, как показано ниже (Из этого документа )

$ python3 setup.py bdist_wheel
# Created "dist", "funmotd.egg-info" and "build" dirs
$ twine upload dist/*

Но когда я запускаю pip install funmotd, PostInstall выполняет НЕ ,Я вижу, что dist/* это как статические скомпилированные вещи.Есть ли хитрость для запуска задач после установки, когда я запускаю pip install funmotd.Или как заставить setup.py выполнить в pip.

Я следовал за нижеприведенными вопросами, не нашел решения, что мне нужно

PS: Я не хочу, чтобы пользователи клонировали репо и запускали python setup.py install.Хотите сделать это просто pip install funmotd

UDPATE1

Кажется, уже существует проблема на github , который является длинной нитью

Ответы [ 2 ]

3 голосов
/ 07 июня 2019

pip не запускается setup.py с колеса, поэтому вы не можете запустить любой код после установки из setup.py в колесе.

setup.py используется для сборки колес или используется во времяустановка исходного дистрибутива (sdist).Поэтому, если вы хотите, чтобы скрипт после установки прекратил загрузку колес в PyPI, разрешите только распространение исходного кода (python3 setup.py sdist).Тогда pip install funmotd будет запускать код из setup.py.

0 голосов
/ 07 июня 2019

Вам нужно вызвать родительский прогон, прежде чем выполнить остальные ваши PostInstall, не могли бы вы попробовать:

class PostInstall(install):
def run(self):
    install.run(self)
    mode = 0o666
    bashrc_file = os.path.join(os.path.expanduser('~'), ".bashrc")
    # Added CLI to .bashrc
    # Change "config.json" file permission

Это, надеюсь, решит проблему - у меня были проблемы с чем-тоочень похож на себя, работает локально, но не через пипс.

...