如何正确打包可调用的python脚本或模块集

问题描述 投票:2回答:3

我已经在网上搜索了很长时间,但似乎无法为最终用户分发python脚本而费解。

我一直在使用此命令python samplemodule.py "args1"在命令行上使用脚本。>

而且这也是我希望用户也可以在其命令行的末尾使用它的方式。但是我担心的是,某些模块与其他库或模块有依赖关系。

我的脚本都在Project的根目录中时有效,但是当我尝试将它们打包并放在子目录中时,一切崩溃了。

一个例子是我现在无法运行我的脚本,因为当我从data子目录导入模块时,该脚本出错。>

这是我的项目结构。

MyProject
    \formatter
      __init__.py
      __main__.py
      formatter.py
      addfilename.py
      addscrapertype.py
     ...\data
         __init__.py
         helper.py
     csv_formatter.py
     setup.py

csv_formatter.py文件只是调用formatter.main的包装。

更新:我现在能够生成tar.gz软件包,但是在我的计算机上安装该软件包时无法调用该软件包。

这是setup.py:

import setuptools

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

setuptools.setup(
    name="formatter",
    version="1.0.1",
    author="My Name",
    author_email="[email protected]",
    description="A package for cleaning and reformatting csv data",
    long_description=long_description,
    long_description_content_type="text/markdown",
    url="https://github.com/RhaEL012/Python-Scripts",
    packages=["formatter"],
    include_package_data=True,
    package_data={
    # If any package contains *.txt or *.rst files, include them:
        "": ["*.csv", "*.rst", "*.txt"],
    },
    entry_points={
         "console_scripts": [
            "formatter=formatter.formatter:main"
        ]
    },
    classifiers=[
        "Programming Language :: Python :: 3",
        "License :: OSI Approved :: MIT License",
        "Operating System :: OS Independent",
    ],
    python_requires='>=3.6',
    install_requires=[
        "pandas"
    ]
)

现在,在计算机上安装软件包后,我无法调用该模块,并导致错误:

Z:\>addfilename "C:\Users\Username\Desktop\Python Scripts\"

Error Message

更新:我尝试在虚拟环境中安装setup.py,只是为了查看错误的出处。

我先安装它,然后收到以下错误:FileNotFoundError: [Errno 2] no such file or directory: 'README.md'

我尝试将README.md包含在MANIFEST.in中,但还是没有运气。因此,我尝试将其设置为字符串,以查看是否可以继续安装。

安装继续,但随后又遇到一个错误,提示package directory 'formatter' does not exist

我已经在网上搜索了很长时间,但似乎无法为最终用户分发python脚本而费解。我一直在命令行上使用脚本...

python python-3.x package pyinstaller
3个回答
2
投票

由于我无法查看您的特定文件,所以我仅说明我通常如何解决此问题。

这是我通常设置命令行界面(cli)工具的方式。项目文件夹如下所示:


0
投票

我不同意其他答案。您不应在__init__.py中运行脚本,而应在__main__.py中运行脚本。


0
投票

我不确定这是否有帮助,但是通常我会使用wheel软件包来打包我的python脚本:

© www.soinside.com 2019 - 2024. All rights reserved.