java中的接口是类吗
344
2022-08-31
python项目打包(一) ------ setup.py、Python源代码项目结构(python应用打包)
setup.py的官方说明文档
distutils安装脚本编写说明 打开上面的链接之后,你可以选择Python的版本、以及文档的语言。setuptools安装脚本编写说明[推荐使用]
建议查看下面两篇博客查看具体案例:
python项目打包(二)------ 利用setup.py打包项目python项目打包(三)------ 利用cx_Freeze打包项目为含环境的应用
setuptools安装脚本官方教程解读
打包和分发的需求
首先你的有Python环境(这不是废话嘛),环境的具体要求如下:
命令行python可执行,可以使用python --version测试命令行pip是可执行命令,可以使用pip --version测试如果显示没有安装,就使用引导:python -m ensurepip --default-pip确保你的pip、setuptools、wheel是最新的使用命令:python -m pip install --upgrade pip setuptools wheel 进行更新
如果你要上传你的包到PYPI,那么你得下载twine这个包shell pip install twine
配置你的项目
setup.py
setup.cfg文件
setup.cfg主要记录setup.py的一些默认选项。 EasyOCR这个项目里面的setup.cfg配置信息如下:
[metadata]description-file = README.md
更多信息,等待更新……
README文档
所有项目都应该包含一个包含项目目标的自述文件。最常见的是使用restructedText(rst格式),当然这不是必须的,目前很多项目都使用Markdown文档,至少在GitHub上面,我的使用范围内这更常见!
MANIFEST.in文档
MANIFEST.in文件是被需要的,当你要打包没有包含在发行源里的文件时,需要将这些路径罗列出来。同样以EasyOCR为例,它的MANIFEST.in文件内容为:
include LICENSE.txtinclude README.mdinclude easyocr/model/*include easyocr/character/*include easyocr/dict/*
LICENSE.txt文件
每个软件包都应该包含一个许可证文件,详细说明分发条款。在许多司法管辖区,没有明确许可证的软件包不能由版权所有者以外的任何人合法使用或分发。我知道你的项目都不想给我们使用,不过万一你突然想开源一个项目呢?在GitHub中会经常看见Apache、GPL、MIT等协议,这些协议对应的不同的权限,不知道怎么写这部分,可以参考Choose an open source license。
你的项目文件
这个文件夹是个性化的,不同的项目有不同的名字及结构,但是对于同一个公司或者个人,你的项目最好采用统一的源代码结构规范,无规矩不成方圆。
setup.py内部函数setup介绍
setup.py文件包含了一个全局的setup函数,看具体参数之前我们先看看官方示例与EasyOCR的setup.py文件
官方示例
```python"""A setuptools based setup module.See:Always prefer setuptools over distutilsfrom setuptools import setup, find_packagesimport pathlibhere = pathlib.Path(__file__).parent.resolve()# Get the long description from the README filelong_description = (here / 'README.md').read_text(encoding='utf-8')# Arguments marked as "Required" below must be included for upload to PyPI.# Fields marked as "Optional" may be commented out.setup( # This is the name of your project. The first time you publish this # package, this name will be registered for you. It will determine how # users can install this project, e.g.: # # $ pip install sampleproject # # And where it will live on PyPI: # # There are some restrictions on what makes a valid project name # specification here: # name='sampleproject', # Required # Versions should comply with PEP 440: # # # For a discussion on single-sourcing the version across setup.py and the # project code, see # version='2.0.0', # Required # This is a one-line description or tagline of what your project does. This # corresponds to the "Summary" metadata field: # description='A sample Python project', # Optional # This is an optional longer description of your project that represents # the body of text which users will see when they visit PyPI. # # Often, this is the same as your README, so you can just read it in from # that file directly (as we have already done above) # # This field corresponds to the "Description" metadata field: # long_description=long_description, # Optional # Denotes that our long_description is in Markdown; valid values are # text/plain, text/x-rst, and text/markdown # # Optional if long_description is written in reStructuredText (rst) but # required for plain-text or Markdown; if unspecified, "applications should # attempt to render [the long_description] as text/x-rst; charset=UTF-8 and # fall back to text/plain if it is not valid rst" (see link below) # # This field corresponds to the "Description-Content-Type" metadata field: # long_description_content_type='text/markdown', # Optional (see note above) # This should be a valid link to your project's main homepage. # # This field corresponds to the "Home-Page" metadata field: # url=' # Optional # This should be your name or the name of the organization which owns the # project. author='A. Random Developer', # Optional # This should be a valid email address corresponding to the author listed # above. author_email='author@example.com', # Optional # Classifiers help users find your project by categorizing it. # # For a list of valid classifiers, see classifiers=[ # Optional # How mature is this project? Common values are # 3 - Alpha # 4 - Beta # 5 - Production/Stable 'Development Status :: 3 - Alpha', # Indicate who your project is intended for 'Intended Audience :: Developers', 'Topic :: Software Development :: Build Tools', # Pick your license as you wish 'License :: OSI Approved :: MIT License', # Specify the Python versions you support here. In particular, ensure # that you indicate you support Python 3. These classifiers are *not* # checked by 'pip install'. See instead 'python_requires' below. 'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3.5', 'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3 :: Only', ], # This field adds keywords for your project which will appear on the # project page. What does your project relate to? # # Note that this is a list of additional keywords, separated # by commas, to be used to assist searching for the distribution in a # larger catalog. keywords='sample, setuptools, development', # Optional # When your source code is in a subdirectory under the project root, e.g. # `src/`, it is necessary to specify the `package_dir` argument. package_dir={'': 'src'}, # Optional # You can just specify package directories manually here if your project is # simple. Or you can use find_packages(). # # Alternatively, if you just want to distribute a single Python file, use # the `py_modules` argument instead as follows, which will expect a file # called `my_module.py` to exist: # # py_modules=["my_module"], # packages=find_packages(where='src'), # Required # Specify which Python versions you support. In contrast to the # 'Programming Language' classifiers above, 'pip install' will check this # and refuse to install the project if the version does not match. See # python_requires='>=3.5, <4', # This field lists other packages that your project depends on to run. # Any package you put here will be installed by pip when your project is # installed, so they must be valid existing projects. # # For an analysis of "install_requires" vs pip's requirements files see: # install_requires=['peppercorn'], # Optional # List additional groups of dependencies here (e.g. development # dependencies). Users will be able to install these using the "extras" # syntax, for example: # # $ pip install sampleproject[dev] # # Similar to `install_requires` above, these must be valid existing # projects. extras_require={ # Optional 'dev': ['check-manifest'], 'test': ['coverage'], }, # If there are data files included in your packages that need to be # installed, specify them here. package_data={ # Optional 'sample': ['package_data.dat'], }, # Although 'package_data' is the preferred approach, in some case you may # need to place data files outside of your packages. See: # # # In this case, 'data_file' will be installed into '/my_data' data_files=[('my_data', ['data/data_file'])], # Optional # To provide executable scripts, use entry points in preference to the # "scripts" keyword. Entry points provide cross-platform support and allow # `pip` to create the appropriate form of executable for the target # platform. # # For example, the following would provide a command called `sample` which # executes the function `main` from this package when invoked: entry_points={ # Optional 'console_scripts': [ 'sample=sample:main', ], }, # List additional URLs that are relevant to your project as a dict. # # This field corresponds to the "Project-URL" metadata fields: # # # Examples listed include a pattern for specifying where the package tracks # issues, where the source is hosted, where to say thanks to the package # maintainers, and where to support the project financially. The key is # what's used to render the link text on PyPI. project_urls={ # Optional 'Bug Reports': ' 'Funding': ' 'Say Thanks!': ' 'Source': ' },)```
EasyOCR示例
```python"""End-to-End Multi-Lingual Optical Character Recognition (OCR) Solution"""from setuptools import setupfrom io import openwith open('requirements.txt', encoding="utf-8-sig") as f: requirements = f.readlines()def readme(): with open('README.md', encoding="utf-8-sig") as f: README = f.read() return READMEsetup( name='easyocr', packages=['easyocr'], include_package_data=True, version='1.1.7', install_requires=requirements, entry_points={"console_scripts": ["easyocr= easyocr.cli:main"]}, license='Apache License 2.0', description='End-to-End Multi-Lingual Optical Character Recognition (OCR) Solution', long_description=readme(), long_description_content_type="text/markdown", author='Rakpong Kittinaradorn', author_email='r.kittinaradorn@gmail.com', url=' download_url=' keywords=['ocr optical character recognition deep learning neural network'], classifiers=[ 'Development Status :: 5 - Production/Stable' ],)```
上面我们初步认识了setup.py文件,下面重点看一下setup函数。
参数name
此参数是你的项目名字,项目命名简洁一些,不要花里胡哨,分割符“-”、“_”、“.”等用一个就好,多了它也认为是一个冗余,搜索时相似的结构都会指向同一对象。
参数version
指定项目的版本号,如:version='1.2.0',
参数description
项目的详细描述
description='A sample Python project',long_description=long_description,long_description_content_type='text/x-rst',
参数url
你的项目主页
清澈的爱,只为中国
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~