使我的 pypi 脚本可执行,而无需每次都指定脚本的路径
Make my pypi script executable without the need to specify every time the path to the script
最近我为 PyPI 创建了一个 python 脚本。您可以使用 pip install
下载。问题是当您位于 python 本地化 (your_python_location/Scripts/myscript.py
) 的 Scripts
文件夹中时,您只能执行使用 pip install
下载的脚本。
但这对用户来说是个麻烦。所以我想问一下,我怎样才能让你可以从任何地方执行脚本? (就像你可以在不指定 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',
)
制作全局可访问 Python 脚本的一种方法是让您的用户调用模块本身。如果您的包名为 'boston-housing-prediction',您的用户将能够使用以下命令从任何地方调用您的脚本:
python -m boston-housing-prediction
它的作用是在您的包中调用一个 __main__.py
文件。这就像任何其他 Python 脚本一样,因此它可以正常接受参数。您所要做的就是将脚本重命名为 __main__.py
并将其放入包目录(不是包含 setup.py 的文件夹,而是放入包含包脚本的文件夹),或者创建一个新的 __main__.py
调用你的脚本(如果它们在同一个文件夹中,你可以只导入脚本)。
这种方法的好处是它独立于平台,仅依赖于正确安装包。它根本不依赖 OS。
你可以在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
条目,但没有理由 本身 您不能同时拥有两者。
最近我为 PyPI 创建了一个 python 脚本。您可以使用 pip install
下载。问题是当您位于 python 本地化 (your_python_location/Scripts/myscript.py
) 的 Scripts
文件夹中时,您只能执行使用 pip install
下载的脚本。
但这对用户来说是个麻烦。所以我想问一下,我怎样才能让你可以从任何地方执行脚本? (就像你可以在不指定 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',
)
制作全局可访问 Python 脚本的一种方法是让您的用户调用模块本身。如果您的包名为 'boston-housing-prediction',您的用户将能够使用以下命令从任何地方调用您的脚本:
python -m boston-housing-prediction
它的作用是在您的包中调用一个 __main__.py
文件。这就像任何其他 Python 脚本一样,因此它可以正常接受参数。您所要做的就是将脚本重命名为 __main__.py
并将其放入包目录(不是包含 setup.py 的文件夹,而是放入包含包脚本的文件夹),或者创建一个新的 __main__.py
调用你的脚本(如果它们在同一个文件夹中,你可以只导入脚本)。
这种方法的好处是它独立于平台,仅依赖于正确安装包。它根本不依赖 OS。
你可以在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
条目,但没有理由 本身 您不能同时拥有两者。