_init_.py 和setup.py

init.py和setup.py


init.py,是要想让一个文件夹成为包的必须的文件!这个文件可以为空,但是必须得有!

setup.py,是用来安装模块用的,dos命令下!java和python都有类似classpath(pythonpath)的一个概念,即程序查找路径。java虚拟机或者python编译器,会从这些路径中查找你程序中所使用的包/模块。
java的classpath有一个非常适合项目开发的特性,就是它的classpath包括了项目根目录下的文件和jar包,这样一个项目中使用其它依赖项,只要把这些jar文件放在程序根目录下就可以了。另一方面自己项目中的代码可以无障碍的互相引用。classpath还包含jre相关的一组路径。
而python的pythonpath概念和java相似,它包含python安装目录相关的一组路径(内置模块和标准库,以及其它第三方模块的共享路径),但是它不支持项目所在根目录这种形式,而是只支持文件所在目录的相对路径。这样说你可以能有一点晕,我用形象的方式来描述。假设python项目为以下结构:
src #项目跟路径,
A #包A,

a.py ,

B #包B,

b.py,

src这个跟路径默认是不在pythonpath中的,此时,如果在想在a.py中引用b.py的代码,如果用。
import B.b ,
是会提示无法找到B.b模块的错误。原因是python解释器执行a.py模块代码时,只能检测a.py所在包A下的模块以及A子目录中的模块,无法检测到同一个项目中B包下的b.py模块。这种情况非常不符合我们构建项目的思维习惯。
最简单的解决方案是将src文件夹路径添加到 PYTHONPATH,这样这个项目里的所有代码就可以通过包名互相访问,这是setup.py所做的主要事情:将整个项目添加到pythonpath

可以认为,setup.py中所记录的就是项目模块添加到pythonpath的规则。

setup.py中会定义此项目中有哪些模块需要被加入到pythonpath,在这个过程中可以把测试项目过滤掉;setup.py中会定义需要的第三方依赖,使用安装命令可以同时安装这些第三方依赖,等等。这样安装完成之后,本机的其它python项目,也能用到此项目的模块。

这里有一个问题,就是不同项目里可能需要使用第三方模块的不同版本,如果所有模块都是安装到pythonpath,就可能造成不同版本的冲突,因此python引入了virtualenv这个概念,为不同项目引入不同的PYTHONPATH进行隔离。

可以看一看PyBuilder项目,类似maven的声明式依赖管理工具,一个语言想要工程化,方便的工程化管理工具必不可少。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值