python怎么加载包_python怎么导入自己写的包

匿名用户

1级

2017-10-24 回答

包(packages)其实也是模块,其类型Type也是module。通常引用自定义模块时有两种方法:

1)将两个文件放在同一目录下。

2)在sys.path下添加要引用的py文件的路径。然后import。

这样的做法,对于少数文件是可行的,但如果程序数目很多,层级很复杂时就比较麻烦了。此时用package就能将多个py文件组织起来,类似于第三方包一样的引用。要方便很多。

package的层次结构与程序所在目录的层次结构相同,且必须包含一个__init__.py的文件。__init__.py可以为空,只要它存在就表明此目录被作为一个package处理。

package1/

__init__.py

subPack1/

__init__.py

module_11.py

module_12.py

module_13.py

subPack2/

__init__.py

module_21.py

module_22.py

……

__init__.py可以为空,只要它存在,就表明此目录应被作为一个package处理。当然,__init__.py中也可以设置相应的内容。

好了,现在我们在module_11.py中定义一个函数:

def funA():

print "funcA in module_11"

return

一.引用模块

在顶层目录(也就是package1所在的目录,当然也参考上面的介绍,将package1放在解释器能够搜索到的地方)运行python:

>>>from package1.subPack1.module_11 import funcA

>>>funcA()

funcA in module_11

这样,我们就按照package的层次关系,正确调用了module_11中的函数。

二.使用通配符*,导入某个module中的所有元素

答案就在__init__.py中。我们在subPack1的__init__.py文件中写

__all__ = ['module_13', 'module_12']

然后进入python

>>>from package1.subPack1 import *

>>>module_11.funcA()

Traceback (most recent call last):

File "", line 1, in

ImportError: No module named module_11

也就是说,以*导入时,package内的module是受__init__.py限制的。

三.在package内部互相调用。

1.如果希望调用同一个package中的module,则直接import即可。也就是说,在module_12.py中,可以直接使用

import module_11

2.如果不在同一个package中,例如我们希望在module_21.py中调用module_11.py中的FuncA,则应该这样:

from module_11包名.module_11 import funcA

四.Python如何找到我们定义的module?

在标准包sys中path属性记录了Python的包路径。

import sys

print(sys.path)

通常我们可以将module的包路径放到环境变量PYTHONPATH中,该环境变量会自动添加到sys.path属性.

另一种方便的方法是编程中直接指定我们的module路径到sys.path 中。

常用的话也可以放在python27\lib\site-packages文件夹下。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
__init__是Python中的特殊方法之一,用于在创建一个对象时进行初始化操作。具体来说,它被用来声明加载、模块的导入变量的预定义。在使用类创建对象时,会自动调用该类的__init__方法,可以在这个方法内部对对象的属性进行赋值和初始化操作。 在类的内部,访问自己的属性和方法,都需要通过self来引用。例如,在一个Person类的__init__方法中,可以使用self来引用对象的name和age属性,如self.name和self.age。这样,在创建Person对象并调用desc方法时,可以通过self来访问name和age属性,如self.name和self.age,从而完成对对象的自我介绍。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [python 中 __init__ 文件的作用](https://blog.csdn.net/qq_26826585/article/details/126343583)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [python中的_init_的含义](https://blog.csdn.net/sj349781478/article/details/118756469)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [python中__init__函数的作用](https://blog.csdn.net/crayonjingjing/article/details/125386981)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值