python的项目结构

项目结构

知识点

  • 创建项目,编写 __init__ 文件
  • 使用 setuptools 模块,编写 setup.py 和 MANIFEST.in 文件
  • 创建源文件的发布版本
  • 项目注册&上传到 PyPI

实验步骤

本实验阐述了一个完整的 Python 项目结构,你可以使用什么样的目录布局以及怎样发布软件到网络上。

我们的实验项目名为 factorial

$ mkdir factorial
$ cd factorial/

1. 主代码

我们给将要创建的 Python 模块取名为 myfact,因此我们下一步创建 myfact 目录。

$ mkdir myfact
$ cd myfact/

主代码将在 fact.py 文件里面。

"myfact module"

def factorial(num):
    """
    返回给定数字的阶乘值

    :arg num: 我们将计算其阶乘的整数值

    :return: 阶乘值,若传递的参数为负数,则为 -1
    """
    if num >= 0:
        if num == 0:
            return 1
        return num * factorial(num -1)
    else:
        return -1

我们还有模块的 __init__.py 文件,内容如下:

from fact import factorial
__all__ = [factorial, ]

我们还在 factorial 目录下添加了一个 README.rst 文件。因此,目录结构看起来像下面这样:

2. MANIFEST.in

现在我们要写一个 MANIFEST.in 文件,它用来在使用 sdist 命令的时候找出将成为项目源代码压缩包一部分的所有文件。

include *.py
include README.rst

如果你想要排除某些文件,你可以在这个文件中使用 exclude 语句。

3. 安装 python-setuptools 包

我们使用 virtualenv(这里不示范步骤)。

$ sudo pip3 install setuptools

4. setup.py

最终我们需要写一个 setup.py,用来创建源代码压缩包或安装软件。

#!/usr/bin/env python3
"""Factorial project"""
from setuptools import find_packages, setup

setup(name = ‘factorial‘,
    version = ‘0.1‘,
    description = "Factorial module.",
    long_description = "A test module for our book.",
    platforms = ["Linux"],
    author="ShiYanLou",
    author_email="[email protected]",
    url="https://www.shiyanlou.com/courses/596",
    license = "MIT",
    packages=find_packages()
    )

name 是项目名称,version 是发布版本,description 和 long_description 分别是项目介绍,项目长描述。platforms 是此模块的支持平台列表。find_packages() 是一个能在你源目录下找到所有模块的特殊函数,packaging docs

4.1. setup.py 用例

要创建一个源文件发布版本,执行以下命令。

$ python3 setup.py sdist

执行完毕会返回类似下面的信息:

running sdist
running egg_info
creating factorial.egg-info
writing factorial.egg-info/PKG-INFO
writing top-level names to factorial.egg-info/top_level.txt
writing dependency_links to factorial.egg-info/dependency_links.txt
writing manifest file ‘factorial.egg-info/SOURCES.txt‘
reading manifest file ‘factorial.egg-info/SOURCES.txt‘
reading manifest template ‘MANIFEST.in‘
writing manifest file ‘factorial.egg-info/SOURCES.txt‘
running check
creating factorial-0.1
creating factorial-0.1/factorial.egg-info
creating factorial-0.1/myfact
making hard links in factorial-0.1...
hard linking MANIFEST.in -> factorial-0.1
hard linking README.rst -> factorial-0.1
hard linking setup.py -> factorial-0.1
hard linking factorial.egg-info/PKG-INFO -> factorial-0.1/factorial.egg-info
hard linking factorial.egg-info/SOURCES.txt -> factorial-0.1/factorial.egg-info
hard linking factorial.egg-info/dependency_links.txt -> factorial-0.1/factorial.egg-info
hard linking factorial.egg-info/top_level.txt -> factorial-0.1/factorial.egg-info
hard linking myfact/__init__.py -> factorial-0.1/myfact
hard linking myfact/fact.py -> factorial-0.1/myfact
Writing factorial-0.1/setup.cfg
creating dist
Creating tar archive
removing ‘factorial-0.1‘ (and everything under it)

我们能在 dist 目录下看到一个 tar 压缩包。

$ ls dist/
factorial-0.1.tar.gz

记住尝试安装代码时使用 virtualenv。

执行下面的命令从源代码安装。

$ sudo python3 setup.py install

学习更多可前往 packaging.python.org

5. Python Package Index (PyPI)

你还记得我们经常使用的 pip 命令吗?有没有想过这些包是从哪里来的?答案是 PyPI。这是 Python 的软件包管理系统。

为了实验,我们会使用 PyPI 的测试服务器 https://testpypi.python.org/pypi

5.1. 创建账号

首先在这个链接注册账号。你会收到带有链接的邮件,点击这个链接确认你的注册。

创建 ~/.pypirc 文件,存放你的账号详细信息,其内容格式如下:

[distutils]
index-servers =
    pypi

[pypi]
repository: https://testpypi.python.org/pypi
username: <username>
password: <password>

替换 <username> 和 <password> 为您新创建的帐户的详细信息。

记得在 setup.py 中更改项目的名称为其它的名字来测试下面的指令。

5.2. 注册项目

下一步我们会注册我们的项目到 PyPI 服务。这通过 register 命令完成。

我们也会使用 -r 把它指向测试服务器。

$ python3 setup.py register -r https://testpypi.python.org/pypi

执行完毕会返回类似下面的信息:

running register
running egg_info
writing factorial.egg-info/PKG-INFO
writing top-level names to factorial.egg-info/top_level.txt
writing dependency_links to factorial.egg-info/dependency_links.txt
reading manifest file ‘factorial.egg-info/SOURCES.txt‘
reading manifest template ‘MANIFEST.in‘
writing manifest file ‘factorial.egg-info/SOURCES.txt‘
running check
Registering factorial to https://testpypi.python.org/pypi
Server response (200): OK

5.3. 上传项目

最后我们使用 upload 命令把我们的项目上传到 PyPI 服务器。记住此命令需要您生成源代码/二进制分发文件后立即调用。

$ python3 setup.py sdist upload -r https://testpypi.python.org/pypi

返回如下信息:

running sdist
running egg_info
writing factorial.egg-info/PKG-INFO
writing top-level names to factorial.egg-info/top_level.txt
writing dependency_links to factorial.egg-info/dependency_links.txt
reading manifest file ‘factorial.egg-info/SOURCES.txt‘
reading manifest template ‘MANIFEST.in‘
writing manifest file ‘factorial.egg-info/SOURCES.txt‘
running check
creating factorial-0.1
creating factorial-0.1/factorial.egg-info
creating factorial-0.1/myfact
making hard links in factorial-0.1...
hard linking MANIFEST.in -> factorial-0.1
hard linking README.rst -> factorial-0.1
hard linking setup.py -> factorial-0.1
hard linking factorial.egg-info/PKG-INFO -> factorial-0.1/factorial.egg-info
hard linking factorial.egg-info/SOURCES.txt -> factorial-0.1/factorial.egg-info
hard linking factorial.egg-info/dependency_links.txt -> factorial-0.1/factorial.egg-info
hard linking factorial.egg-info/top_level.txt -> factorial-0.1/factorial.egg-info
hard linking myfact/__init__.py -> factorial-0.1/myfact
hard linking myfact/fact.py -> factorial-0.1/myfact
Writing factorial-0.1/setup.cfg
Creating tar archive
removing ‘factorial-0.1‘ (and everything under it)
running upload
Submitting dist/factorial-0.1.tar.gz to https://testpypi.python.org/pypi
Server response (200): OK

现在如果你浏览这个页面,你会发现你的项目已经准备好被别人使用了。

总结

本实验使用了 setuptools 包,并完成了较为完整的项目创建&发布流程,最后还将项目发布到了网络 (PyPI)上。

时间: 2024-12-28 01:54:35

python的项目结构的相关文章

Python封装应用程序的最佳项目结构是什么?

Python封装应用程序的最佳项目结构是什么? 转载来源于stackoverflow:https://stackoverflow.com/questions/193161/what-is-the-best-project-structure-for-a-python-application 和http://www.cnblogs.com/alex3714/articles/5765046.html#3719169 开发一个终端用户桌面应用(非网页),最佳的项目文件夹层次结构是怎样的? 理想的项目

Python 项目结构

实验准备 我们的实验项目名为 factorial. 12 $ mkdir factorial$ cd factorial/ 主代码 我们给将要创建的 Python 模块取名为 myfact,因此我们下一步创建 myfact 目录. 12 $ mkdir myfact$ cd myfact/ 主代码将在 fact.py 文件里面. 1234567891011121314151617181920 "myfact module" def factorial(num): ""

django开发个人简易Blog——构建项目结构

开发之前第一步,就是构造整个的项目结构.这就好比作一幅画,第一步就是描绘轮廓,有了轮廓,剩下的就是慢慢的填充细节.项目结构规划如下图: 项目结构描述: 本项目以fengzhengBlog为根目录. admin.blogapp是两个app目录,用于实现项目主要功能:包括模型定义.视图定义等 css.js.images分别为样式文件.js.图片的静态文件存放目录. template目录存放模板文件. ueEditor是富文本编辑器uEditor的目录. settings.py是全局配置文件,urls

python 软件目录结构规范

为什么要设计好目录结构? "设计项目目录结构",就和"代码编码风格"一样,属于个人风格问题.对于这种风格上的规范,一直都存在两种态度: 一类同学认为,这种个人风格问题"无关紧要".理由是能让程序work就好,风格问题根本不是问题. 另一类同学认为,规范化能更好的控制程序结构,让程序具有更高的可读性. 我是比较偏向于后者的,因为我是前一类同学思想行为下的直接受害者.我曾经维护过一个非常不好读的项目,其实现的逻辑并不复杂,但是却耗费了我非常长的时间去

python软件目录结构规范

软件目录结构规范 软件开发规范 一.为什么要设计好目录结构? 1.可读性高: 不熟悉这个项目的代码的人,一眼就能看懂目录结构,知道程序启动脚本是哪个,测试目录在哪儿,配置文件在哪儿等等.从而非常快速的了解这个项目. 2.可维护性高: 定义好组织规则后,维护者就能很明确地知道,新增的哪个文件和代码应该放在什么目录之下.这个好处是,随着时间的推移,代码/配置的规模增加,项目结构不会混乱,仍然能够组织良好. 二.目录组织方式 关于如何组织一个较好的Python工程目录结构,已经有一些得到了共识的目录结

【Flask】 项目结构说明

项目结构 Flask的一大优势就是其极其轻量化.但是也需要注意到,如果我们要用Flask做一个大项目的话,把所有代码写在一个文件里肯定是不合适的.非常难以维护.但是和Django这种框架又不一样,Flask并没有规定项目一定要遵从某种必须遵守的目录结构.最终,人们在长期的实践中得到一些比较好用因此约定俗成的目录结构. 一个典型的flask项目的目录结构是这样的(再次明确,不是强制的,而是约定俗成的一种结构): 这种结构有四个顶级文件夹,主体的程序代码都放在app包中:migrations文件夹中

python计算机视觉项目实践 答案

有问题的找我哈,转载标明出处http://blog.csdn.net/ikerpeng/article/details/25027567 里面具体的图没有贴了,原理还是比较好理解的.需要的找我! 基于朴素贝叶斯的图片分类 摘要 图片分类问题是计算机视觉中比较常见的问题.图片分类在日常的生活中,以及图片搜索中等方面都有很多很实际的用途.如何准确快速有效的进行图片分类,提高图片分类的准确率和召回率是现在主要要解决的问题.因此一个好的分类学习的算法以及一个好的特征提取的方式是非常重要的.本文所采取的学

flask开发restful api系列(7)-蓝图与项目结构

如果有几个原因可以让你爱上flask这个极其灵活的库,我想蓝图绝对应该算上一个,部署蓝图以后,你会发现整个程序结构非常清晰,模块之间相互不影响.蓝图对restful api的最明显效果就是版本控制:而对整个项目来说,总要有后台管理系统吧,总要有web管理吧,但这些东西不能全部放到view.py.不单单是这样,如果你是一个经验丰富的程序员,你应该知道,一个程序最好只有一个入口点,从这个入口点进去,全是单向的,就像一棵树一样,入口点就在树根,然后蔓延到树干,树枝.树枝和树枝之间最好不要太多交集,也就

Django--基本篇:项目结构与设计模式(MVC)

Django在项目开发中有着结构清晰.层次明显.容易编写理解查阅demo的优点,那么我们来个小案例具体看看.    一.项目结构简析: 我们按照上一篇中的开发流程步骤创建一个新项目myblog,项目下有应用home.存放html文件templates的.运行项目生成的db.sqlite3和manage.py文件.在一个项目下可以创建多个应用,每个应用可以进行一项业务(下图),我这里用home应用文件来处理前端,myadmin应用文件来处理后端.这里需要注意的是在settings.py文件中INS