python 编写简单的setup.py

本文介绍Python第三方库开发的基础流程,包括编写setup.py文件的方法及注意事项,如何打包并安装自定义库,适合初学者参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  学习python也已经有一段时间了,发现python作为脚本语言一个很重要的特点就是简单易用,而且拥有巨多的第三方库,几乎方方面面的库都有,无论你处于哪个行业,想做什么工作,几乎都能找到对应的第三方库。别人造好了轮子,我们直接拿过来用,这大大方便了开发,也极大地提升了效率。那么问题来了,有那么多的第三方库,我们如何开发一个属于自己的库呢?其实这是一个比较大的问题,因为开发一个库涉及到的问题很多,比如这个库要用来干嘛,实现什么功能,有没有已经类似的库了,效率如何等。但是这里,我只想抛砖引玉,简单记录一下开发的基本流程。

  编写python的第三方库,最终要的一个工作就是编写setup.py了,其实如果我们下载过一些第三库的源代码文件,打开之后一般就会有一个setup.py,执行python setup.py install 就可以安装这个库了。setup.py 如何编写内容很多,可以参考官方文档:https://wiki.python.org/moin/Distutils/Tutorial?highlight=%28setup.py%29。一个典型的setup.py的写法如下(参考自官方文档):

 1 from distutils.core import setup
 2 
 3 #This is a list of files to install, and where
 4 #(relative to the 'root' dir, where setup.py is)
 5 #You could be more specific.
 6 files = ["things/*"]
 7 
 8 setup(name = "appname",
 9     version = "100",
10     description = "yadda yadda",
11     author = "myself and I",
12     author_email = "email@someplace.com",
13     url = "whatever",
14     #Name the folder where your packages live:
15     #(If you have other packages (dirs) or modules (py files) then
16     #put them into the package directory - they will be found 
17     #recursively.)
18     packages = ['package'],
19     #'package' package must contain files (see list above)
20     #I called the package 'package' thus cleverly confusing the whole issue...
21     #This dict maps the package name =to=> directories
22     #It says, package *needs* these files.
23     package_data = {'package' : files },
24     #'runner' is in the root.
25     scripts = ["runner"],
26     long_description = """Really long text here.""" 
27     #
28     #This next part it for the Cheese Shop, look a little down the page.
29     #classifiers = []     
30 ) 

首先,当然是建立一个名字叫setup.py的文件啦。 从distutils.core 导入 setup, 然后编写 setup()函数,这个函数里面有相当多的属性,比如version 代表版本号,description 是描述文档,author是作者等,如果是正规的开发,所有这些东西都应该按照规范去写。其中比较重要的几个选项是,name,表示模块的名称。packages,表示包所在的目录,如果我们要打包的所有python文件都在根目录,即和setup.py是一个目录,那么直接写 packages=[""]就可以了。如果python文件在一个单独的文件夹,和setup.py不在同一个目录,则需要写 package_dir=["":"python 文件所在的目录名字"],比如如果有foo1.py 和 foo2.py这两个文件,在src这个文件夹,那么需要写package_dir=["":"src"],同时写

packages=[""],打包就可以导入foo1和foo2两个模块了。如果想在同一个包中包含多个模块,比如在foo包中包含foo1和foo2两个模块,则可以直接把foo1.py和foo2.py所在的文件夹直接命名为foo,然后写 packages["foo"] (注意foo文件夹需要有__init__.py这个文件,可以为空,这样才能引用到foo1和foo2)。其他还有很多写法,这篇博文总结的很好,http://www.cnblogs.com/UnGeek/p/5922630.html,需要的朋友可以参考下。有的时候我们写的代码需要引入一些额外的信息文件,比如文本文件,或者图片,说明文件等等,这些东西是需要一块打包的,那么这个时候该如何指定呢?此时需要用到 data_files 这个选项了。data_files的写法是:data_files= [('文件要放入的文件夹1',

['file1',file2']),('文件要放入的文件夹2',['file3',file4'])],file1,file2等是文件的名称,注意data_files的元素都是元组,元组的第一个元素是文件要放入的文件夹名称,第二个元素是文件列表。这里需要注意的是,如果不想把文件放入文件夹,可以将元组的第一个元素指定为空字符串,此时要打包的文件要被放入根目录,这里根目录是指python解释器所在的目录。比如我需要将文件资源放入python解释器所在目录下的/Lib/site-packages/myfolder路径,myfolder是自定义的文件夹,元组的第一个元素就可以写‘Lib/site-packages/myfolder’,打包时会自动在指定位置新建一个名为myfolder的目录,将文件资源放入其中。

其实 setup.py 文件的编写还有非常多的内容,这里只是介绍了九牛一毛。后面接触到了更复杂的再继续补充吧。具体还是要参考官方文档。

最后一步就是打包命令了。这篇文章讲的非常详细:http://blog.youkuaiyun.com/lynn_kong/article/details/17540207,大家自行参考。

简单来说,linux下的打包命令是:python setup.py sdist 为模块创建一个源码包。在windows下,可以使用 python setup.py bdist_wininst 生成一个exe文件。双击该exe文件,就会弹出python库的安装界面(就是经典的蓝色界面),可以自己选择要安装的位置(特别是电脑中有多个版本的python的时候,需要指定这个库装到哪个python库目录下),一路下一步,就安装成功了。此时去指定的python库目录下,就会发现多出了一些我们自己安装的文件以及文件夹。此时试着import一下,就会发现已经可以导入我们自己的模块了。

热爱编程,热爱机器学习! github:http://www.github.com/Lyrichu github blog:http://Lyrichu.github.io 个人博客站点:http://www.movieb2b.com(不再维护)
Python 项目中,`setup.py` 是一个核心文件,它主要用于管理项目的构建、打包和分发过程。该文件通常包含项目的元数据以及如何构建和安装模块的指令[^3]。 ### 基本作用 - **项目分发**:`setup.py` 文件是项目分发和安装的核心脚本,使开发者能够轻松地分享和使用代码[^1]。 - **安装模块**:通过运行特定命令,如 `python setup.py install`,可以安装模块[^2]。 - **依赖管理**:`setup.py` 文件可以指定 package 的依赖、描述性的信息等[^4]。 - **入口点定义**:它可以定义控制台脚本的入口点,例如当运行某个命令时,指定执行哪个模块中的哪个函数[^5]。 ### 使用方法 要使用 `setup.py` 文件,首先需要确保已经安装了 `setuptools` 包。可以通过以下命令安装: ```bash pip install setuptools ``` 一旦有了 `setup.py` 文件,就可以使用多种命令来操作你的包。例如,要安装包,可以在包含 `setup.py` 文件的目录中运行: ```bash python setup.py install ``` 如果你希望以开发模式安装包(这样对源代码的更改会立即生效,无需重新安装),可以使用: ```bash pip install -e . ``` 此外,`setup.py` 还支持其他许多命令,比如 `sdist` 创建源码分发包,`bdist_wheel` 创建 wheel 包等。 ### 编写 setup.py 编写 `setup.py` 文件时,至少需要提供一些基本的信息,例如包名、版本号、包含的包列表等。下面是一个简单的例子,展示了如何创建一个名为 `ugit` 的模块,并设置一个控制台脚本入口点: ```python from setuptools import setup setup( name='ugit', version='1.0', packages=['ugit'], entry_points={ 'console_scripts': [ 'ugit = ugit.cli:main' ] } ) ``` 在这个例子中,当用户运行 `ugit` 命令时,程序将运行 `ugit.cli` 模块下的 `main` 函数[^5]。 ### 最佳实践 - 维护清晰的项目结构。 - 提供详尽的文档和注释。 - 使用虚拟环境来隔离不同项目的依赖。 - 利用现代工具如 `setuptools` 和 `wheel` 来简化打包和分发流程。 以上就是关于 `setup.py` 文件的基本作用及其使用方法的一些介绍。如果您有更具体的问题或者需要进一步的帮助,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值