Y0d*_*0da 6 python packaging setup.py
我刚刚完成了一个模块,想要打包它.我已经阅读了包含python应用程序的文档和这个问题,但是当我没有要导入的包但是要启动的脚本时,我不确定如何继续.
该项目看起来像这样:
Project/
|-- README
|-- requirement.txt
|-- driver.py
|-- run.py
|-- module_1
| |-- __init__.py
| |-- class_1.py
| |-- class_2.py
|-- module 2
|-- |-- __init__.py
|-- |-- class_1.py
|-- |-- class_2.py
Run Code Online (Sandbox Code Playgroud)
为了启动我做的工具:
python run.py arg1 --option arg2
Run Code Online (Sandbox Code Playgroud)
driver.py导入所有其他模块并定义一个Driver类和一些函数.run.py导入driver.py,解析参数,设置记录器并一个接一个地调用函数来完成工作.
我不确定配置setup.py,我还需要一个全局__init__.py的根?根据我的理解,我只能用它的参数import Project来启动脚本run.py.
从其他读数,也许我应该试着告诉那Driver.py是包并使用entry_points选项setup().但我不明白如何正确地完成所有这些工作.
谢谢你的热心帮助!
Bre*_*bel 11
通常,当整个项目适合单个模块文件时,您只将 python 包作为模块分发。如果您的项目比这更复杂,通常最好将您的项目构建为带有__init__.py文件的包。这是您的项目转换为包的样子
Project/
|-- README
|-- requirement.txt
|-- setup.py
|-- scripts/
| |-- driver.py
|-- driver/
| |-- __init__.py
| |-- module_1
| | |-- __init__.py
| | |-- class_1.py
| | |-- class_2.py
| |-- module_2
| |-- |-- __init__.py
| |-- |-- class_1.py
| |-- |-- class_2.py
Run Code Online (Sandbox Code Playgroud)
我将您重命名为run.py,scripts/driver.py而您之前使用的代码driver.py现在是driver/__init__.py.
你setup.py应该看起来像这样
from setuptools import setup. find_packages
setup(
name='driver',
version='1.0',
packages=find_packages(),
scripts=['scripts/driver.py'],
)
Run Code Online (Sandbox Code Playgroud)
这将复制scripts/driver.py到 python 脚本目录。我重命名run.py为driver.py因为run非常通用,并且您希望脚本名称是唯一的,因为所有 python 包共享相同的脚本位置。
或者,您可以使用console_scripts入口点。在这种情况下,您不会有单独的scripts/driver.py脚本。相反,您的包中只会有一个函数。在这种情况下,您可以将所有代码从scripts/driver.pyinto移动driver/command_line.py并将其放入名为main(). 然后把你的改成setup.py这个
setup(
name='driver',
version='1.0',
packages=find_packages(),
entry_points = {
'console_scripts': ['driver=driver.command_line:main'],
}
)
Run Code Online (Sandbox Code Playgroud)
此外,您应该阅读有关 python 包装的此文档页面。它涵盖了基础知识和许多常见用例。