python怎么导入自己写的包
发布网友
发布时间:2022-04-26 02:17
我来回答
共3个回答
热心网友
时间:2022-04-18 05:39
包(packages)其实也是模块,其类型Type也是mole。通常引用自定义模块时有两种方法:
1)将两个文件放在同一目录下。
2)在sys.path下添加要引用的py文件的路径。然后import。
这样的做法,对于少数文件是可行的,但如果程序数目很多,层级很复杂时就比较麻烦了。此时用package就能将多个py文件组织起来,类似于第三方包一样的引用。要方便很多。
package的层次结构与程序所在目录的层次结构相同,且必须包含一个__init__.py的文件。__init__.py可以为空,只要它存在就表明此目录被作为一个package处理。
package1/
__init__.py
subPack1/
__init__.py
mole_11.py
mole_12.py
mole_13.py
subPack2/
__init__.py
mole_21.py
mole_22.py
……
__init__.py可以为空,只要它存在,就表明此目录应被作为一个package处理。当然,__init__.py中也可以设置相应的内容。
好了,现在我们在mole_11.py中定义一个函数:
def funA():
print "funcA in mole_11"
return
一.引用模块
在顶层目录(也就是package1所在的目录,当然也参考上面的介绍,将package1放在解释器能够搜索到的地方)运行python:
>>>from package1.subPack1.mole_11 import funcA
>>>funcA()
funcA in mole_11
这样,我们就按照package的层次关系,正确调用了mole_11中的函数。
二.使用通配符*,导入某个mole中的所有元素
答案就在__init__.py中。我们在subPack1的__init__.py文件中写
__all__ = ['mole_13', 'mole_12']
然后进入python
>>>from package1.subPack1 import *
>>>mole_11.funcA()
Traceback (most recent call last):
File "", line 1, in
ImportError: No mole named mole_11
也就是说,以*导入时,package内的mole是受__init__.py*的。
三.在package内部互相调用。
1.如果希望调用同一个package中的mole,则直接import即可。也就是说,在mole_12.py中,可以直接使用
import mole_11
2.如果不在同一个package中,例如我们希望在mole_21.py中调用mole_11.py中的FuncA,则应该这样:
from mole_11包名.mole_11 import funcA
四.Python如何找到我们定义的mole?
在标准包sys中path属性记录了Python的包路径。
import sys
print(sys.path)
通常我们可以将mole的包路径放到环境变量PYTHONPATH中,该环境变量会自动添加到sys.path属性.
另一种方便的方法是编程中直接指定我们的mole路径到sys.path 中。
常用的话也可以放在python27\lib\site-packages文件夹下。
热心网友
时间:2022-04-18 06:57
自己写的模块,要放在需要导入文件同一个目录或者放在lib或者script目录(默认的模块目录)
然后,import 名字 就行。主要不要带后缀,带文件名就行
热心网友
时间:2022-04-18 08:32
我也不组队哦