如何为单个Python文件创建包?

时间:2014-04-06 15:20:29

标签: python packaging pypi

我目前正在尝试Python软件包。我有一个小项目,我想与一些人分享。这个项目只包含一个Python文件,所以我认为为它创建一个Python包不应该太难。

我已经设法在PyPI上使用以下setup.py注册项目:

from setuptools import setup

setup(
    name='LumixMaptool',
    version='1.0.4',
    author='Martin Thoma',
    author_email='info@martin-thoma.de',
    packages=['lumix-maptool'],
    scripts=['lumix-maptool/lumix-maptool.py'],
    url='http://pypi.python.org/pypi/LumixMaptool/',
    license='LICENSE',
    description='Manage GPS information for Panasonic Lumix cameras.',
    long_description="""Panasonic offers GPS metadata to add to a SD card. This metadata can contain
tourist information that might be useful for sightseeing. This maptool helps
to copy the data from Lumix DVD to the SD card that is inserted into your 
computer (the camera has not to be connected).""",
    install_requires=[
        "argparse >= 1.2.1",
        "pyparsing >= 2.0.1",
        "pyparsing >= 2.0.1",
    ],
    entry_points={
        'console_scripts':
            ['lumixmaptool = lumixmaptool:main']
    }
)

使用命令

python setup.py register

后来用

更新
python setup.py sdist upload

现在就在这里:https://pypi.python.org/pypi/LumixMaptool

但我目前在以下条目中遇到问题:

  • packages
  • scripts
  • entry_points

我需要填写什么?我是否必须拥有某个项目结构/某些文件?

我目前有:

  • 的Readme.txt
  • LICENSE.TXT
  • setup.py
  • lumix-maptool.py

项目GitHub网站位于:https://github.com/MartinThoma/lumix_map_tool

1 个答案:

答案 0 :(得分:0)

PyPI上的每个包都需要在目录的根目录下有一个名为setup.py的文件。如果你使用markdown格式的自述文件,你还需要一个setup.cfg文件。此外,您还需要一个LICENSE.txt文件来描述可以对代码执行的操作。因此,如果我一直在处理名为mypackage的库,我的目录结构将如下所示:

root-dir/   # arbitrary working directory name
        setup.py
        setup.cfg
        LICENSE.txt
        README.md
        mypackage/
            __init__.py
            foo.py
            bar.py
            baz.py

请参阅此link以了解有关包装的更多信息。

  • 入口点

EntryPoints提供基于文件系统的持久对象名称注册和基于名称的直接对象导入机制(由setuptools包实现)。

它们将Python对象的名称与自由格式标识符相关联。因此,无论在何处定义对象,使用相同Python安装并知道标识符的任何其他代码都可以访问具有关联名称的对象。关联的名称可以是Python模块中存在的任何名称;例如,类,函数或变量的名称。入口点机制并不关心名称所指的内容,只要它是可导入的。

"切入点"通常是Python包的开发人员或用户可能想要使用的函数(或其他可调用的函数类对象),尽管不可调用的对象也可以作为入口点提供(正如在注释中正确指出的那样) !)。

最流行的切入点是" console_script"入口点,指向您希望作为命令行工具提供给安装程序包的任何人的函数。

包用于包含root-dir中存在的所有python包。你可以使用find_packages()

对于简单的项目,通常很容易手动将包添加到setup()的packages参数中。但是,对于非常大的项目(Twisted,PEAK,Zope,Chandler等),保持包列表更新可能是一个很大的负担。这是setuptools.find_packages()的用途。请参阅docs

  • 脚本

有关脚本,请参阅此docs