使我的 pypi 脚本可执行,而无需每次都指定脚本的路径



最近我为 PyPI 创建了一个 python 脚本。您可以使用pip install下载。问题是你只能执行你用pip install下载的脚本,当你在Scripts文件夹中时,你的python是本地化的(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',
)

您可以在setup.py中指定entry_points,例如

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

这将导致pip install在类似/usr/local/bin/boston_housing的地方安装一个包装器,它基本上是拉入模块boston-housing-main并运行其main()功能。

您可能希望用此条目替换scripts条目,尽管本身没有理由不能同时拥有两者

制作全局可访问的 Python 脚本的一种方法是让用户调用模块本身。如果您的包称为"波士顿住房预测",则用户将能够使用以下命令从任何地方调用您的脚本:

python -m boston-housing-prediction

这样做是在包内调用__main__.py文件。这就像任何其他 Python 脚本一样,因此它可以正常接受参数。您所要做的就是将脚本重命名为__main__.py并将其放入包目录中(不是包含 setup.py 的文件夹,而是放入包含包脚本的文件夹中(,或者创建一个调用脚本的新__main__.py(如果脚本位于同一文件夹中,您可以直接导入脚本(。

这种方法的好处是它独立于平台,仅依赖于包的正确安装。它根本不依赖于操作系统。

最新更新