如何将python代码打包成pip包(可以pip install)
作者:zx 发布时间:2021-08-23 21:38:10
python代码包的用途
当你想打包一个目录时,需要现在目录中放一个_init_.py,该文件叫包初始化文件,文件可以为空,也可以放一些代码。举例:
目录hello
—— __init__.py
—— 代码1.py
—— 代码2.py
......
为什么这样做?
如果你想import任何有_init_.py文件的目录下的任何python代码,python都会先运行_init_.py,再运行代码文件。
添加_init_.py还有一个好处,就是在写python代码的时候不用担心python解释器找不到这个目录,不用担心你import时pycharm给你的包划红线了。
以前写代码是,如果你想导入其他项目的python代码,往往会报错,解决方法有三种:
将别人的代码打成pip包,用pip安装到自己的项目
在自己的代码中写sys.path.append(“别人代码的目录的路径”)
在别人代码目录中创建一个__init__py
你也可以在包中添加一些全局变量或者全局类,供包中的其他代码使用,举例:
目录hello
_init_.py
class birds:
legs = 2
wings = 2
head = 1
然后项目中其他任意位置的代码都可以使用init中的包全局变量和类
格式是 from 目录 import 类/变量
from hello import birds
编写setup.py
和_init_.py同级目录中创建一个setup.py,这个就是pip包安装的脚本。
setup.py
from setuptools import setup find_packages
setup(name='birds',
version='0.0.1',
description='birds atttributes and functions',
author='megnet',
author_email='2290906844@qq.com',
requires= ['numpy','matplotlib'], # 定义依赖哪些模块
packages=find_packages(), # 系统自动从当前目录开始找包
# 如果有的包不用打包,则只能指定需要打包的文件
#packages=['代码1','代码2','__init__'] #指定目录中需要打包的py文件,注意不要.py后缀
license="apache 3.0"
)
'''
name : 打包后包的文件名
version : 版本号
author : 作者
author_email : 作者的邮箱
py_modules : 要打包的.py文件
packages: 打包的python文件夹
include_package_data : 项目里会有一些非py文件,比如html和js等,这时候就要靠include_package_data 和 package_data 来指定了。package_data:一般写成{‘your_package_name’: [“files”]}, include_package_data还没完,还需要修改MANIFEST.in文件.MANIFEST.in文件的语法为: include xxx/xxx/xxx/.ini/(所有以.ini结尾的文件,也可以直接指定文件名)
license : 支持的开源协议
description : 对项目简短的一个形容
ext_modules : 是一个包含Extension实例的列表,Extension的定义也有一些参数。
ext_package : 定义extension的相对路径
requires : 定义依赖哪些模块
provides : 定义可以为哪些模块提供依赖
data_files :指定其他的一些文件(如配置文件),规定了哪些文件被安装到哪些目录中。如果目录名是相对路径,则是相对于sys.prefix或sys.exec_prefix的路径。如果没有提供模板,会被添加到MANIFEST文件中。
生成whl和tar.gz文件包
python setup.py bdist_wheel # 打包为whl文件
python setup.py sdist # 打包为tar.gz文件
在和_init_.py同级目录下有一个dist目录,打包好的文件就在里面。
来源:https://blog.csdn.net/xuezhangjun0121/article/details/128907404
猜你喜欢
- 程序比较大,运行时间又长的时候,不想等着结果,只要先确保程序功能正确无误,可以把需要的结果print然后保存到TXT文件中,超级方便# 创建
- 今天,在完成一个小的python习题,习题的主要内容是读取一个帮助模块,并保存到本地文件。知道是用pydoc进行模块的读取,但是在windo
- 本文实例讲述了Django中使用group_by的方法。分享给大家供大家参考。具体分析如下:在Django中怎样使用group_by语句呢?
- 本文讲述了Python多进程同步简单实现代码。分享给大家供大家参考,具体如下:#encoding=utf8from multiprocess
- 前言博主参与过大大小小十次数学建模比赛,也获得了不少建模奖项。对于一些小批量样本数据去做预测或者是评估其规律性的话,比较适合的模型一般都是选
- 本文实例为大家分享了python学生管理系统开发的具体代码,供大家参考,具体内容如下学生管理系统(基础版)#定义一个函数,显示可以使用的功能
- 和朋友讨论时,我提到过一个观点,所有框架层设计中,最核心的是导航设计。最近更看到有国外同行提出“80%的可用性是导航!”因为良好的导航可以保
- 0.偶然间看到一个奇怪的现象>>> x = 1>>> a = var()>>> a[&
- asp使用SQL语句,查询数据库中的第10-20条记录的l方法,两种sql语句写法如下:1、select top 10 * from tab
- 一、功能目标用户输入一个类似 1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568
- 题目:用 JavaScript 代码实现空位补零,比如 pad(12, 3) => 012实现一:/* 平淡无奇法 */functio
- 本文实例讲述了php7 图形用户界面GUI 开发。分享给大家供大家参考,具体如下:一、下载指定系统扩展http://pecl.php.net
- 在使用Python编写面向对象的代码时,我们会常常使用“继承”这种开发方式。例如下面这一段代码:class Info: def
- Pycurl包是一个libcurl的Python接口,由C语言编写的,功能强大,速度快。由于pycurl的属性和方法太多了,写这篇博文记录一
- 一,进程的理论基础一个应用程序,归根结底是一堆代码,是静态的,而进程才是执行中的程序,在一个程序运行的时候会有多个进程并发执行。进程和线程的
- 1、定义路由// 阿里云文件储存Route::group(['prefix'=>'aliyun'],
- 在软件项目实施的时候,数据导入一直是项目人员比较头疼的问题。其实,在SQL Server中集成了很多成批导入数据的方法。有些项目实施顾问头疼
- “表情包”是当前社交软件上不可或缺的交流方式,难以用文字表达的意思,发一个“表情包”,对方就能心领神会。下面是小派制作的一个表情包,准确地讲
- 第一列按照goodsid局部分组,然后在分组后的记录中按照audittime升序排序得到序号,从而显示某商品得第几次变迁。 第二列是取该商品
- original article by sp(’Sergio Pereira’) Sergio Pereiralast update: Ma