项目结构
Posted think-cl
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了项目结构相关的知识,希望对你有一定的参考价值。
阐述了一个完整的 Python 项目结构,你可以使用什么样的目录布局以及怎样发布软件到网络上。
知识点
创建项目,编写 __init__ 文件
使用 setuptools 模块,编写 setup.py 和 MANIFEST.in 文件
创建源文件的发布版本
项目注册&上传到 PyPI
1.创建项目
我们的实验项目名为 factorial,放到 /home/shiyanlou/factorial 目录:
$ cd /home/shiyanlou
$ mkdir factorial
$ cd factorial/
我们给将要创建的 Python 模块取名为 myfact,因此我们下一步创建 myfact 目录。
$ mkdir myfact
$ cd myfact/
主代码将在 fact.py 文件里面。
#! /usr/bin/python #coding=uft-8 def factorial(num): ‘‘‘ 返回给定数字的阶乘 :param num: 计算其阶乘的整数值 :return:阶乘值,若传负数,值为-1 ‘‘‘ if num >=0 : if num == 0: return 1 else: return num * factorial(num - 1) else: return -1
我们还有模块的 __init__.py 文件,内容如下
#! /usr/bin/python #coding=uft-8 from fact import factorial __all__ = [factorial,]
我们还在 factorial 目录下添加了一个 README.rst 文件。
2 MANIFEST.in
现在我们要写一个 /home/shiyanlou/factorial/MANIFEST.in 文件,它用来在使用 sdist 命令的时候找出将成为项目源代码压缩包一部分的所有文件。
include *.py
include README.rst
如果你想要排除某些文件,你可以在这个文件中使用 exclude 语句。
3.安装python-setuptools 包
$ sudo pip install setuptools
4.setup.py
最终我们需要写一个 /home/shiyanlou/factorial/setup.py,用来创建源代码压缩包或安装软件。
#! /usr/bin/python #coding=utf-8 ‘‘‘Factoral 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="zhangwei", author_email="[email protected]", url="", license = "MIT", packages=find_packages() )
name 是项目名称,version 是发布版本,description 和 long_description 分别是项目介绍,项目长描述。platforms 是此模块的支持平台列表。find_packages() 是一个能在你源目录下找到所有模块的特殊函数,packaging docs。
5.setup.py 用例
要创建一个源文件发布版本,执行以下命令。
python setup.py sdist
得到如下提示
unning sdist running egg_info creating factorial.egg-info writing factorial.egg-info/PKG-INFO writing dependency_links to factorial.egg-info/dependency_links.txt writing top-level names to factorial.egg-info/top_level.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 warning: check: missing required meta-data: url creating factorial-0.1 creating factorial-0.1/factorial.egg-info creating factorial-0.1/myfact copying files to factorial-0.1... copying MANIFEST.in -> factorial-0.1 copying README.rst -> factorial-0.1 copying setup.py -> factorial-0.1 copying factorial.egg-info/PKG-INFO -> factorial-0.1/factorial.egg-info copying factorial.egg-info/SOURCES.txt -> factorial-0.1/factorial.egg-info copying factorial.egg-info/dependency_links.txt -> factorial-0.1/factorial.egg-info copying factorial.egg-info/top_level.txt -> factorial-0.1/factorial.egg-info copying myfact/__init__.py -> factorial-0.1/myfact copying 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
最后安装的目录结构
[[email protected] python]$ tree factorial factorial ├── dist │ └── factorial-0.1.tar.gz ├── factorial.egg-info │ ├── dependency_links.txt │ ├── PKG-INFO │ ├── SOURCES.txt │ └── top_level.txt ├── MANIFEST.in ├── myfact │ ├── fact.py │ └── __init__.py ├── README.rst └── setup.py 3 directories, 10 files
------------------------------------------------------------------------上传
2.4 Python Package Index (PyPI)
你还记得我们经常使用的 pip 命令吗?有没有想过这些包是从哪里来的?答案是 PyPI。这是 Python 的软件包管理系统。
为了实验,我们会使用 PyPI 的测试服务器 https://testpypi.python.org/pypi。
2.4.1 创建账号
首先在这个链接注册账号。你会收到带有链接的邮件,点击这个链接确认你的注册。
创建 ~/.pypirc 文件,存放你的账号详细信息,其内容格式如下:
[distutils] index-servers = pypi testpypi [pypi] repository: https://upload.pypi.org/legacy/ username: <username> password: <password> [testpypi] repository:https://test.pypi.org/legacy/ username: <username> password: <password>
替换 <username> 和 <password> 为您新创建的帐户的详细信息。在这里,由于我们是到 testpypi的网页上去注册账号,即将相应的服务上传到 testpypi,所以在这里,你只需修改[testpypi]的用户名和密码
记得在 setup.py 中更改项目的名称为其它的名字来测试下面的指令,在接下来的命令中我将项目名称修改为factorial2,为了不重复,需要自行修改至其它名称
2.4.2 上传到 TestPyPI 服务
下一步我们会将我们的项目到 TestPyPI 服务。这通过 twine 命令完成。
我们也会使用 -r 把它指向测试服务器。
$ sudo pip3 install twine
$ twine upload dist/* -r testpypi
执行完毕会返回类似下面的信息,
Uploading distributions to https://test.pypi.org/legacy/
Uploading factorial2-0.1.tar.gz
在这里你也可以使用下面的命令上传到 PyPI 服务上,但这里需要注意,在 ~/.pypirc 里面,你需要到 https://pypi.python.org页面,按照上面的步骤去注册一个账号,然后到~/.pypirc 的 [pypi] 下填写相应的用户名和密码。testpypi 和 pypi 的账号密码并不通用。
$ twine upload dist/* -r testpypi
现在如果你浏览这个页面,你会发现你的项目已经准备好被别人使用了。
https://files.cnblogs.com/files/think-cl/factorial-0.1.tar.gz
以上是关于项目结构的主要内容,如果未能解决你的问题,请参考以下文章