Сделайте мой скрипт pypi исполняемым без необходимости каждый раз указывать путь к скрипту - PullRequest
0 голосов
/ 22 сентября 2019

Недавно я создал скрипт Python для PyPI.Это вы можете скачать с pip install.Проблема в том, что вы можете выполнить только тот скрипт, который вы скачали с pip install, когда вы находитесь в папке Scripts, в которой находится ваш питон (your_python_location/Scripts/myscript.py).
Но это будет хлопотно дляпользователи.Итак, я хотел спросить, как я могу сделать так, чтобы вы могли выполнить сценарий отовсюду?(как вы можете сделать с pip без указания местоположения pip).Я также не хочу, чтобы каждый пользователь указывал путь к сценарию.

Мой Setup.py (может быть, это полезно):

import setuptools

with open("README.md", "r") as fh:
    long_description = fh.read()

with open('requirements.txt') as f:
    requirements = f.read().splitlines()

setuptools.setup(
    name="boston-housing-prediction",
    version="0.2.0a0",
    author="xx",
    author_email="xxx@gmail.com",
    py_modules=["misc_libary", "polynomial_regression_libary", "linear_regression_libary"],
    scripts=["boston-housing-main.py"],
    description="Predict housing prices in boston.",
    long_description=long_description,
    long_description_content_type="text/markdown",
    url="https://github.com/XXX",
    packages=setuptools.find_packages(),
    classifiers=[
        "License :: OSI Approved :: MIT License",
        "Operating System :: OS Independent",
        'Programming Language :: Python :: 3.5',
        'Programming Language :: Python :: 3.6',
        'Programming Language :: Python :: 3.7'
    ],
    keywords="regression meachine-learning housing_prices_boston learning_purpose",
    license="MIT",
    install_requires=requirements,
    python_requires='>=3.5',
)

Ответы [ 2 ]

1 голос
/ 22 сентября 2019

Вы можете указать entry_points в setup.py, например

setuptools.setup(
    # ...
    entry_points = {
        'console_scripts': [
            'boston_housing = boston-housing-main:main'
        ]
    },
)

. Это приведет к тому, что pip install установит обертку где-то вроде /usr/local/bin/boston_housing, которая в основном вытягивает модуль boston-housing-main и запускаетего main() функция.

Возможно, вы захотите заменить запись scripts на эту, хотя нет никакой причины как таковой , которую вы не могли бы иметь оба.

1 голос
/ 22 сентября 2019

Один из подходов к созданию глобально доступного скрипта Python - это заставить ваших пользователей вызывать сам модуль.Если ваш пакет называется «boston-housing-предсказание», ваши пользователи смогут вызывать ваш сценарий из любой точки мира с помощью следующей команды:

python -m boston-housing-prediction

Это означает, что файл __main__.py внутри вашего файлапакет.Это так же, как любой другой скрипт Python, поэтому он может принимать аргументы в обычном режиме.Все, что вам нужно сделать, это переименовать ваш скрипт в __main__.py и перетащить его в каталог пакета (не в папку с файлом setup.py, а в папку со скриптами пакета), или создать новый __main__.py, который вызывает ваш скрипт(вы можете просто импортировать скрипт, если он находится в одной папке).

Преимущество этого подхода заключается в том, что он независим от платформы и полагается только на правильную установку пакетов.Он совсем не зависит от ОС.

...