【问题标题】:Use custom Python package使用自定义 Python 包
【发布时间】:2018-10-05 17:57:42
【问题描述】:

我对 Python 还很陌生,我真的不知道如何使用自定义包或其开发生命周期。

我一直在开发一个 Python 库,旨在从位于生产环境中指定文件夹的许多脚本中使用。

目前,库和使用它的脚本从开发生命周期的角度来看是高度耦合的,因为它的开发仍处于早期阶段。

问题是,如何测试从脚本中使用的库是否正常工作?

到目前为止,为了能够从脚本中导入自定义库,我考虑了 3 种不同的选择:

  1. 作为pip左右的安装包

  2. 以某种方式将软件包下载到目录并更改pythonpath

  3. 作为脚本文件夹中的目录

根据我使用其他语言的经验,选项 1 是最好的,因为它可能更容易处理包发布并且一切都将以“标准”方式进行,但在我的情况下,作为包源可能会有些困难托管在与生产环境隔离的私有 Gitlab 服务器中。

在我看来,选项 2 和 3 是一种变通方法,而不是使用自定义库的“好方法”。

在 Python 中还有其他替代方案可以有效地使用包吗?

【问题讨论】:

    标签: python pip package


    【解决方案1】:

    从如何使用自定义包开始

    您必须定义该软件包的用途。我的意思是,它对每个人或只对你有用。如果是第一种情况,那么最好的方法是在 PyPI 上发布它(在这种情况下,请遵循所有步骤)。如果是第二个目的,则省略第 5 步。

    那么,无论你的打包目的是什么,第一步是:

    1. 开发包(尝试记录和测试它)。 PyCharm 是一个很好的 IDE,可以帮助创建单元测试。我建议你看看以下链接:Creating-and-running-Python_Test

      A Project Test folder structure that I have been working on

    2. 第二步是创建一个 setup.py 文件。 setup.py 文件可以包含很多字段。这里有一个例子:

        from setuptools import setup
      
      
        setup(
        name='mdutils',
        version=1.0,
        license='BSD',
        author='Didac Coll',
        author_email='didaccoll_93@hotmail.com',
        maintainer='Dídac Coll',
        maintainer_email='didaccoll_93@hotmail.com',
        description='A package, useful to create Markdown files while executing python code.',
        long_description=open('README.md').read(),
        platforms=['Python 3.6'],
        packages=['mdutils', 'mdutils.tools', 'mdutils.fileutils'],
        include_package_data=True,
        zip_safe=False,
        classifiers=['Development Status :: 4 - Beta',
                     'Operating System :: OS Independent',
                     'Programming Language :: Python',
                     'Programming Language :: Python :: 3.6',
                 'Topic :: Utilities',
                 'License :: OSI Approved :: BSD License'])
      
    3. 一旦你创建了你的包,你必须使用下面的命令python setup.py develop来测试发行版

    4. 如果一切正常,现在您可以使用以下命令 python setup.py sdist 创建您的发行版。这将生成一个名为 dist 的新文件夹,您将在其中找到一个 tar.gz 文件。如果您有兴趣为 Windows 创建发行版,我建议您使用下一个命令 python setup.py sdist --format=zip。这样,您将创建一个 zip 文件到 dist 文件夹。

      现在您在压缩文件中拥有自己的包分发。所以如果你想 将其安装到项目中,只需要使用 pip:pip install mdutils- 1.0.zip。您也可以使用以下 python 命令对其进行升级:python install --upgrade mdutils-2.0.zip

      执行前面的命令会将你的包安装到你的站点包文件夹中。

      在这里,你会发现很多关于打包和分发的信息:https://packaging.python.org/tutorials/distributing-packages/

    这里也有很好的教程:https://python-packaging.readthedocs.io/en/latest/

    1. 最后,如果您的项目工作正常,您可以在 PyPi 上发布它。您必须创建一个帐户。一旦你有了它,使用以下命令注册你的包:python setup.py register。我强烈建议您在尝试在 PyPI 上发布之前先在 TestPyPI 上对其进行测试。在此处创建另一个帐户:https://test.pypi.org/,然后在 PyCharm 终端上输入此命令:twine upload --repository-url https://test.pypi.org/legacy/ dist/*(有关 TestPyPI 的更多信息here)。

    【讨论】:

      【解决方案2】:

      到目前为止,分发包的最佳方式是通过pip。该功能易于使用,并且在分发时已经解决了最终用户的编译器问题。如果您的包包含 C 扩展,pip 特别有用,因为在操作系统(尤其是 Windows)上编译可能是一场噩梦。

      另一种方式(类似于2)是从源安装,即setup.py文件而不添加python路径,只需像使用pip一样安装即可:

      您需要一个 setuptools 安装脚本。一旦你准备好构建运行:

      python setup.py build
      

      或 python ./setup.py 构建

      如果你在 PowerShell 中运行。

      这将生成一个包含源的压缩文件(在扩展的情况下编译),您可以分发它。

      最终用户只需运行:

      python setup.py install 
      

      python ./setup.py install 在 PowerShell 上安装包。

      【讨论】:

        猜你喜欢
        • 2018-02-08
        • 1970-01-01
        • 2020-01-08
        • 1970-01-01
        • 2017-11-29
        • 1970-01-01
        • 2017-05-01
        • 2021-01-17
        • 2013-02-09
        相关资源
        最近更新 更多