首页 > 解决方案 > 从 CLI 运行 python 轮,就像它是单个脚本一样

问题描述

我希望在 Azure Databricks 中制作一个 python 轮作为 spark-submit 作业上传,但我无法验证我的轮是否正常工作。我不明白对轮子的调用在哪里或如何找到该__main__方法。

如何以运行 main 方法的方式构建包和/或在命令行上调用 wheel 文件?

下面是我正在尝试的一个简单的包;它所做的只是回应今天的日期。

我尝试运行脚本的一些命令:

python dist/today-0.0.1-py3-none-any.whl/
python dist/today-0.0.1-py3-none-any.whl/__main__
python dist/today-0.0.1-py3-none-any.whl/main

我已经尝试了很多关于命名主文件以及命名方法的变体main.pyor __main__.pymain__main__一切都给了我同样的错误: C:\Python391\python.exe: can't find '__main__' module in 'C:\<DIRECTORYPATH>\\dist\\today-0.0.1-py3-none-any.whl'

该包由一个空包组成,__init__.py如下main.py所示:

import datetime

def main():
    print(f'Today is {datetime.date.today()}')

if __name__ == '__main__':
    main()

我的目录结构是:

Wheeltest
  |-- setup.py
  |-- today
       |-- __init__.py
       |-- __main__.py

我已经解压了 wheel 文件,并且可以确认它具有文件夹的顶层,其中today包含 2 个 py 文件。我的 setup.py 文件看起来像这样(我也试过没有 entry_points 部分):

from setuptools import setup
from setuptools import find_packages

VERSION = '0.0.1'
DESCRIPTION = 'today package.'
LONG_DESCRIPTION = 'today dist.'

# Setting up
setup(
    name='today',
    version=VERSION,
    author='Simon Norton',
    author_email='<xxxxxxxx@yyyyy.com>',
    description=DESCRIPTION,
    long_description=LONG_DESCRIPTION,
    packages=find_packages(),
    entry_points={
        'console_scripts': ['main=today.__main__:main']
    },
    classifiers=['Development Status :: Testing',
        'Programming Language :: Python :: 3',
        'Operating System :: Microsoft :: Windows',
        'Operating System :: Linux']
)

非常感谢!

标签: pythonpackagepython-wheel

解决方案


轮子文件的路径必须包含轮子内的顶级文件夹才能找到__main__从我的示例中,顶级文件夹称为“today”:

C:\<DIRECTORYPATH>\\dist\\today-0.0.1-py3-none-any.whl\\today

推荐阅读