gpt4 book ai didi

python - 如何正确打包一组可调用的 Python 脚本或模块

转载 作者:行者123 更新时间:2023-12-03 23:48:34 25 4
gpt4 key购买 nike

我已经在网上搜索了很长一段时间,但我似乎无法思考如何为最终用户分发我的 python 脚本。

我一直在我的命令行上使用我的脚本使用这个命令 python samplemodule.py "args1"
这也是我希望我的用户也可以通过命令行最终使用它的方式。但我担心的是,某些模块依赖于其他库或模块。

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

这方面的一个例子是我现在无法运行我的脚本,因为当我从 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="sample@email.com",
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.mdMANIFEST.in但仍然没有运气。
所以我试着把它变成一个字符串,看看安装是否会继续。

安装继续进行,但我又遇到一个错误,指出 package directory 'formatter' does not exist

最佳答案

由于我无法查看您的特定文件,因此我将仅解释我通常如何解决此问题。

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

Projectname
├── modulename
│   ├── __init__.py # this one is empty in this example
│   ├── cli
│   │   ├── __init__.py # this is the __init__.py that I refer to hereafter
│   ├── other_subfolder_with_scripts
├── setup.py

所有功能都在 modulename 文件夹和子文件夹中。
在我的 __init__.py我有:
def main():
# perform the things that need to be done
# also all imports are within the function call
print('doing the stuff I should be doing')

但我认为您也可以将所需内容导入 __init__.py并且仍然以我在 setup.py 中的方式引用它.
setup.py我们有:
import setuptools

setuptools.setup(
name='modulename',
version='0.0.0',
author='author_name',
packages=setuptools.find_packages(),
entry_points={
'console_scripts': ['do_main_thing=modulename.cli:main'] # so this directly refers to a function available in __init__.py
},
)

现在使用 pip install "path to where setup.py is" 安装软件包然后,如果已安装,您可以调用:
do_main_thing
>>> doing the stuff I should be doing

对于我使用的文档: https://setuptools.readthedocs.io/en/latest/ .

我的建议是从这个开始,慢慢添加你想要的功能。然后逐步解决您的问题,例如添加 README.md 等。

关于python - 如何正确打包一组可调用的 Python 脚本或模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60928855/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com