python中setuppy和_init_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的声明式依赖管理工具,一个语言想要工程化,方便的工程化管理工具必不可少。

来源:https://www.weidianyuedu.com/content/5520628089008.html

你可能感兴趣的:(Python,编程语言,python,开发语言,jar)