发布时间:2019-09-03 08:55:52编辑:auto阅读(2024)
这里主要收集python项目的打包、发布和部署的常用方法,只是入门级别,深入的流程还是以官方文档为准(链接每节都已经给出)。
- distutils,setuptools,pip,virtualenv
- 官网资料(Python Packaging User Guide):
https://packaging.python.org/key_projects/#setuptools
distutils - Python自带的基本安装工具, 适用于非常简单的应用场景使用, 不支持依赖包的安装
通过distutils来打包,生成安装包,安装python包等工作,需要编写名为setup.py python脚本文件。
setuptools - 针对 distutils 做了大量扩展, 尤其是加入了包依赖机制。不支持python3,安装完setuptools后会有easy_install
distribute - 类似于setuptools,支持python3,安装完distribute后会有easy_install。
easy_install - setuptools 和 distribute 自带的安装脚本, 也就是一旦setuptools或distribute安装完毕, easy_install 也便可用了。
pip - 目标是取代easy_install。easy_install 有很多不足: 安装事务是非原子操作, 只支持 svn, 没有提供卸载命令, 安装一系列包时需要写脚本; pip 解决了以上问题, 已俨然成为新的事实标准, virtualenv 与它已经成为一对好搭档;
distutils2 - setuptools 和 distribute 的诞生是因为 distutils 的不济, 进而导致目前分化的状况。它将成为 Python 3.3 的标准库 packaging , 并在其它版本中以distutils2 的身份出现; 换句话说, 它和 pip 将联手结束目前混乱的状况。
virtualenv - 用来创建隔离的python环境,处理python环境的多版本和模块依赖。
在该文件夹下,新建setup.py文件
编辑内容:
from distutils.core import setup
setup(
name=’logIn’, #这个是最终打包的文件名
version=’1.0.0’,
py_modules=[‘logInr’], #要打包哪些,.py文件,
)
在命令行下,进入该文件夹,运行一下命令:
setuptools 只是对distutils 的增强, 其使用过程还是一样:
编辑: 先在项目主目录下编辑setup.py,
打包: python setup.py sdist
安装: sudo python setup.py install (--record files.txt)
卸载: sudo cat files.txt | sudo xargs rm -rf
setuptools工具的setup.py的模板
模板 (只是一部分, 详见官网说明)
import ez_setup
ez.setup.use_setuptools() # 这两行是当setuptools不存在时,自动从网上下载安装所需的setuptools包.
from setuptools import setup, find_packages
setup(
name = "HelloWorld",
version = "0.1",
packages = find_packages(), # 常用,要熟悉 :会自动查找当前目录下的所有模块(.py文件) 和包(包含__init___.py文件的文件夹)
scripts = ['say_hello.py'],
# Project uses reStructuredText, so ensure that the docutils get
# installed or upgraded on the target machine
install_requires = ['docutils>=0.3'], # 常用
package_data = {
# If any package contains *.txt or *.rst files, include them:
'': ['*.txt', '*.rst'],
# And include any *.msg files found in the 'hello' package, too:
'hello': ['*.msg'],
},
#
entry_points = {
'console_scripts': [
'foo = demo:test',
'bar = demo:test',
],
'gui_scripts': [
'baz = demo:test',
]
},
# metadata for upload to PyPI
author = "Me",
author_email = "me@example.com",
description = "This is an Example Package",
license = "PSF",
keywords = "hello world example examples",
url = "http://example.com/HelloWorld/", # project home page, if any
# could also include long_description, download_url, classifiers, etc.
)
主要命令:
$ virtualenv ENV
$ virtualenv --system-site-packages ENV # 继承系统原来的安装包
$ source bin/activate # 启动虚拟环境
$ deactivate # 退出环境
$ rm -r /path/to/ENV # 删除环境
$ virtualenv --relocatable ENV # 创造可以浮动的虚拟环境
$ virtualenv --extra-search-dir=/path/to/distributions ENV # 添加自定义版本的pip或setuptools
移植:
创建无继承的虚拟环境
virtualenv --no-site-packages PATH/to/projDirName
进入projDirName, 编辑项目
cd PATH/to/projDirName
退出,至上级目录
cd ..
virtualenv --relocatable projDirName# 创造可以浮动的虚拟环境
将整个文件夹复制到指定的机器上, 进入PATH/to/projDirName, 启动环境,运行程序
这里只列出部署相关的两条命令
pip freeze > requirements # freeze 是导出当前环境安装的安装包
pip install -r requirements.txt # 这个requirements.txt 有格式要求
上一篇: python 大数加法
下一篇: python mock 的一些小例子
47620
46020
36925
34492
29102
25754
24587
19730
19274
17771
5585°
6170°
5709°
5765°
6721°
5501°
5506°
6006°
5978°
7309°