Python使用setuptools打包自己的分发包并使用举例(setup.py)

Python文件制作tar.gz包(源码包)

setup.py文件的编写

setup.py中主要执行一个 setup函数,该函数中大部分是描述性东西,最主要的是packages参数,列出所有的package,可以用自带的find_packages来动态获取package。所以setup.py文件的编写实际是很简单的。

例如我们写了一个foo.py 

foo.py

def explain(name):
    print(f'Sorry, I am {name}, I do not want to foo you but this is a practice to learn setuptools.')
 
if __name__ == '__main__':
    explain('hxx')

想能够像个包一样把它导入其他程序

现在我们想安装它

创建一个setup.py文件 (setup.py撰写规范)

import setuptools
 
#定义包的一些属性
setuptools.setup(
    name='hxx_learn',
    version='1.0',
    description='print hello world',
    author = 'hxx',
    author_email = 'test@test.com',
    url='',  #假如你的这个包有个介绍网站或者github之类的,就可以写上
    packages = setuptools.find_packages('./')
)

字段含义

  • name:包名称.
  • version (-V):包版本
  • url:程序的官网地址
  • description:程序的简单描述
  • packages:需要处理的包目录(包含__init__.py的文件夹)
  • py_modules:需要打包的python文件列表
  • data_files:打包时需要打包的数据文件,如图片,配置文件等
  • scripts:安装时需要执行的脚步列表
  • package_dir:告诉setuptools哪些目录下的文件被映射到哪个源码包
  • requires:定义依赖哪些模块
  • entry_points:控制命令的
  • find_packages()  默认在和setup.py同一目录下搜索各个含有 __init__.py的包。如果有多个含有 __init__.py的包,会都打包到一起。
  • zip_safe: 等于False的话,不压缩包,而是以目录的形式安装

 要想把这个包能打包分发,mypackage下一定要有__init__.py文件,空的就行

否则,后面执行python setup.py sdist也会成功执行,但是生成的压缩文件里是不包含my_package的

打包

这就是在构建一个源码发布包

python setup.py sdist 将源码打包成 tar.gz (用于 Linux 环境中)或者 zip 压缩包(用于 Windows 环境中)

python setup.py sdist

 之后会生成dist目录和hello.egg-info目录

dist下的tar.gz文件是以setup.py中定义的name和version命名的

目录结构是这样的

 

解压hxx_learn.1.0.tar.gz得到是这样的

即生成的foo.egg-info其实已经被打包进tar.gz文件里了,还有hxx_package的源码

dist下的hxx_learn-1.0.tar.gz我们就可以发给其他人,他们就可以通过pip去安装了

在另一台服务器上

可见,它也是build 成 wheel

pip list可以看到

安装完后就可以调用了

 所以,虽然我们安装的库名字叫做hxx-learn,但是调用的时候并不会有hxx-learn出现

制作python包为wheel文件(二进制包)

wheel是一个已经编译好的包,在安装时不需要编译过程,安装whl文件时要比发布的源文件安装要快。

python setup.py bdist_wheel

制作成wheel和制作成tar.gz是并列的,既可以制作成wheel又可以制作成tar.gz

例如现在还是

 执行python setup.py bdist_wheel

 之后会生成 build, dist 和 egg-info目录

 目录结构是这样

现在whl文件就可以分发给别人安装使用了

另一台服务器上 

pip list显示

 安装完后就可以调用了

分发给别人本地开发使用

正常情况下,我们都是通过上面两种情况构建源码包或者二进制包然后分发给别人进行模块的安装的。

但是当像mmdetection框架这样,要分发给用户进行二次开发的,这样就不能给别人tar.gz或whl的安装包了,所以就把整个文件目录给别人,别人pip install -e . 安装,就可以继续开发了。

这条命令不会真正安装包,而是在系统环境中创建一个软连接指向包实际所在的目录,这样修改了相关文件之后不用再安装便能生效,便于开发调试等

所以通常只有这种情况下才会需要这种本地安装。而很少会有给别人文件目录,然后让别人python setup.py install来安装的,这和打包成tar.gz或whl没区别了,除非是想让别人方便看一下源码(因为有了whl文件,只要后缀改成zip再解压也能看到源码)

直接将你的目录发给别人,在其他服务器上

执行pip install -e . (or python setup.py develop) 

 执行之后目录下多了egg-info文件

 pip list已经可以看到了

 可以执行了

好的,我知道了。关于Python打包分发工具setuptools的安装和使用,具体步骤如下: 1. 首先,确保你已经安装了Python3。如果没有安装,可以去Python官网下载并安装。 2. 接着,在命令行中输入以下命令来安装setuptools: ``` pip3 install setuptools ``` 3. 安装完成后,你可以使用以下命令来验证setuptools是否安装成功: ``` python3 -m easy_install --version ``` 如果输出了setuptools的版本号,说明安装成功。 4. 接下来,你可以使用setuptools打包你的Python项目。在你的项目根目录下创建一个名为`setup.py`的文件,内容如下: ``` from setuptools import setup, find_packages setup( name='your-project-name', version='0.1', packages=find_packages(), install_requires=[ 'dependency1', 'dependency2', # ... 其他依赖项 ], entry_points={ 'console_scripts': [ 'your-script-name=your_package_name.module_name:main' ] } ) ``` 其中,`name`是你的项目名称,`version`是你的项目版本号,`packages`是你的项目中包含的所有Python模块,`install_requires`是你的项目依赖的所有Python包,`entry_points`是你的项目可执行文件的入口。 5. 编写完`setup.py`文件后,你可以使用以下命令来构建一个源码分发包: ``` python3 setup.py sdist ``` 6. 构建完成后,你可以使用以下命令来安装你的项目: ``` pip3 install your-project-name-0.1.tar.gz ``` 7. 如果你的项目需要发布到PyPI等Python包管理平台上,可以使用以下命令来上传你的项目: ``` python3 setup.py sdist upload ``` 以上就是使用setuptools进行Python打包分发的基本步骤。希望对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值