如何打包和分发Python程序(.py源代码),以便其他开发人员可以轻松安装所有必需的依赖项



我正在开发一个python的应用程序

那么,我如何分发我的程序,以便其他人可以轻松安装每个必需的依赖关系/软件包,而只是使其在每台计算机上工作?设置是我要寻找的还是根本不需要的?如果是这样,您能解释一下它的作用,并提供一个示例设置。

ps:我也有一个问题:我需要在程序的顶级文件夹中或仅在子目录中提供__init__.py?

在过去的不太过去,我使用本指南来学习如何打包和分发我的python代码,然后一些好人创造了Flit,这使我可以分三个步骤完成整个过程。

$pip install flit

创建我的元数据文件:

[metadata]
author=Some guy
author-email=some-email@nowhere.com
home-page=https://github.com/someuser/somepackage
requires=requests
requires-python= >=3
description-file=README.rst
classifiers=Intended Audience :: Developers
    License :: OSI Approved :: BSD License
    Programming Language :: Python :: 3
    Topic :: Software Development :: Libraries :: Python Modules

发布我的软件包:

$pip flit publish

完成!

根据此处的文档

setup.py

Python库还有另一种类型的依赖项规范 称为setup.py。setup.py是分发和 安装Python库。如果您正在建造Python库,这样 作为请求或内衣,您必须包括设置。 经理可以正确安装库以及其他 图书馆的依赖项。仍然有很多混乱 在Python社区中,关于需求之间的差异.txt 和setup.py,所以请阅读这篇写得很好 澄清。

还检查以下内容:

什么是setup.py?

您可以看到此示例以了解如何制作自己的示例:

https://github.com/pypa/sampleproject/blob/master/setup.py

另外,这里还有一个指南:

https://pythonhosted.org/an_example_pypi_project/setuptools.html

这是指向熊猫设置文件的链接,您可以在其中查看他们如何执行其依赖项的检查,它们可能是平台特定的,或任何第三方软件包特定的

不幸的是,python包装具有复杂的历史记录,而新工具仍在出现。我的理解是,当前的"黄金标准"是使用setup_tools定义setup.py文件。该文件将允许其他人使用PIP安装您的项目源代码。如果您想能够在不明确下载源的情况下使用PIP安装,则需要使用python setup.py upload将项目发布给PYPI。

下面是setup.py样板我用作起点:

#!/usr/bin/env python
""" boilerplate for new project setup.py """
from setuptools import setup
import io
import projectname
def read(*filenames, **kwargs):
    encoding = kwargs.get('encoding', 'utf-8')
    sep = kwargs.get('sep', 'n')
    buf = []
    for filename in filenames:
        with io.open(filename, encoding=encoding) as f:
            buf.append(f.read())
    return sep.join(buf)
long_description = read('README.md') #, 'CHANGES.txt')
setup(name='projectname',
    version=projectname.__version__,
    description='short desc of projectname',
    long_description=long_description,
    author='Tylar Murray',
    author_email='code+projectname@tylar.info',
    url='https://github.com/7yl4r/projectname',
    tests_require=['nose'],
    install_requires=[
        'networkx'  # or whatever
    ],
    #cmdclass={'test': PyTest},
    packages=['projectname', 'OtherProjectProvidedPackage2']
)

注意:此模板要求您在顶级__init__.py

中具有README.md和类似__version__="0.1.23"

关于您的P.S.问题:从技术上讲,您应该为此打开一个新问题,但简而言之,您应该在此处涵盖,特别是在此答案中包括。

最新更新