解决package命名冲突:浅谈setuptools之namespace package概念

本文介绍了Python中namespace package的概念,通过一个例子展示了当不同路径下有同名package时,如何使用setuptools的namespace_packages参数来避免命名冲突。通过修改setup.py文件,使得多个库的同名package能正确合并,从而实现包的正常导入。
摘要由CSDN通过智能技术生成

浅谈setuptools之namespace package概念

本文的撰写动因:最近在折腾zope WEB 框架,在研究依赖包安装的过程中偶然发现了setup.py中的namespace package这个概念,发现自己竟是一头雾水,百度了一遍发现并没有中文的详细讲解文章,自己平日里看其它大神的文章受益匪浅,而自己从未对他人做出过什么贡献,遂开通了一个CSDN博客,试着把这个问题说明白。

note 1:本文读者应具备python package、module以及python程序打包的的基本知识
note 2:若有任何错误请指出或叙述不轻的地方,请吐槽-_-,本人将第一时间更正
note 3:本文以python2.7为例,如果有读者使用的版本不同,有些目录名称可能不同

1.PYTHON的package查找模式

与java类似,PYTHON中也有package的概念,所谓package,就是包含一个或多个python module、package的集合,在系统中以文件夹的形式存在,每个package文件夹中还需要包含一个__init__.py文件(若有子package,则每个子package目录中也要包含一个__init__.py文件)

例如我们定义一个名为a的package:

[root@localhost ~]# cd ~/test mkdir && package_test
[root@localhost package_test]# mkdir a
[root@localhost package_test]# echo > a/__init__.py
[root@localhost package_test]# echo 'print "module_1"' > a/module_1
为了演示方便,我们的工作目录可以通过pwd命令查看:
[root@localhost package_test]# pwd
/root/test/package_test
由于python自动将工作目录加入到sys.path中(对sys.path陌生的请自行百度),
执行python命令,测试package a中的module_1可以正常导入
[root@localhost package_test] python
>>> import a.module_1
>>> module_1
可以看到,package a 中的moduel_1正常import了
至此,一切都按照我们的设想正常进行

接下来,玩坏了!

现在假设某位大神dashen想与我们合作,但又不想和我们共用一个目录,因而他提出让我们给他开一个帐号,名称为dashen,而他自己的代码就保存在/home/dashen 目录(家目录)下
于是,dashen兄做了以下操作:
[dashen@localhost ~]$ mkdir my_project && cd my_project
胃疼的是:由于dashen兄所负责的功能与我们package a 中的很相似,因此他也将自己的代码放到了package a 中:
[dashen@localhost my_project]$ mkdir a
[dashen@localhost my_project]$ echo 'print "moduel_2"' > a/module_2.py
这个时候,我们要对代码进行联调,所以将dashen兄的项目目录加入了sys.path中:
[root@localhost package_test]# python
>>> import sys<

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值