① python怎样导入自己写的包
python导入自己写的包的方法:
1、导入同级目录下的文件可以用“import 包名”导入
2、导入子目录文件可以用“from 包名 import 文件名”导入
更多Python知识,请关注:Python自学网!!
② 如何导入python中的模块
定义模块,只要使用文本编辑器,把一些python代码输入到文本中,然后以.py为后缀名进行保存,任何此类文件都会被认为是python模块。
比如说,下面的代码输入到一个文件中,就可以看作是一个模块:
def printme(var): print varif __name__ == '__main__': printme(1)
假设说输入到a.py中,那么import a就可以把这个模块导入。
然后可执行a.printme(3),屏幕即可打印出3:
>>> a.printme(3)3>>>
一个模块顶层定义的变量,会自动变成模块的属性。例如:
data=[1,2,3]def printme(var): print varif __name__ == '__main__': printme(1)
data变量就是模块的一个属性。其实printme也是一个属性,只不过是一个函数罢了。
引入模块示例如下:(假定此时data=[1,2,3]未定义)
>>> import a>>> a.data Traceback (most recent call last): File "<pyshell#1>", line 1, in <mole> a.dataAttributeError: 'mole' object has no attribute 'data'>>> reload(a)<mole 'a' from 'C:/py\a.pyc'>>>> a.data Traceback (most recent call last): File "<pyshell#3>", line 1, in <mole> a.dataAttributeError: 'mole' object has no attribute 'data'>>>
从上述提示可以看出data属性未定义,此时再在a.py文件中定义data=[1,2,3],重新加载a模块,并输出data属性:
>>> reload(a)<mole 'a' from 'C:/py\a.py'>>>> a.data[1, 2, 3]>>>
这里的reload函数可以重新加载一个模块。如果在模块代码中更改了,那么需要重新加载。
上面a.data,就是访问模块中的属性。
上面的例子是导入一个文件作为一个模块。
其实python的模块导入还有更丰富的内容。
除了模块名之外,python也可以导入指定目录路径。python代码的目录就称为包。因此,这类导入就称为包导入。事实上,包导入是把计算机上的目录变成python的一个命名空间。而属性就是目录中包含的子目录或者是模块文件。
看下面例子:
在我的桌面上有一个aa文件夹,里面有bb文件夹,bb里面有a.py这个文件。
那么在aa和bb文件夹中分别放置一个__init__.py,之后,在命令行中import aa.bb.a,就可以导入模块a了。
③ python 导入模块
在文件夹a的下面,新建一个__init__.py的py文件,
然后添加ab文件路径为系统路径:sys.path.append(ab文件路径)
最后利用:from a import a即可。
④ python导入py文件报错怎么办
python有大量的内置模块,可以方便地导入。同样python也可以导入其它人写的py程序,以利用别人写好的类和函数。
1、在缺省状态下,导入一个已编写好的py文件用import 跟上py文件名,有时系统会出现SyntaxError: invalid syntax的错误:
4、写入目录后,再执行import上面写的py就可以成功了
注意:如果我们需要导入的模块是放在文件夹里面,那么,文件夹里面必须要添加__init__.py文件,以使得python能够找到模块的位置。__init__.py可以为空,只要它存在,就表明此目录应被作为一个package处理。当然,__init__.py中也可以设置相应的内容。
本人的__init__.py内容如下:
################################################################################
# __init__.py
# This is here to make python see Profile folder
⑤ python 中库怎么导入
让包内导入更加显式,这个功能的一部分设计初衷是,为了帮助脚本解决同名文件出现在模块搜索路径上多个不同位置时的二义性。考虑包目录,这定义了一个名为mypkg 的包,其中含有名为mypkg.main和mypkg.string 的模块。现在,假设模块main试图导入名为string的模块。在 Python 2.X和更早版本中,Python会先寻找mypkg目录以执行相对导入。这会找到并导入位于该处的string.py文件,将其赋值给mypkg.main模块命名空间内的名称string。不过,这一导入的本意可能是要导入Python标准库的string模块。可惜的是,在这些Python版本中,无法直接忽略mypkg.string 去寻找位于模块搜索路径更右侧的标准库中的string模块。此外,我们无法使用完整包导入路径来解决这个问题,因为我们无法依赖在每台机器上的标准链接库路径。换句话说,包中的简单导入可能具有二义性而且容易出错。在包内,我们无法确定imports pam语句指的是包内的模块还是包外的模块。一种可能的后果是,一个局部的模块或包会在不经意间隐藏了sys.path 上的另一个模块。
在实践中,Python使用者可以避免为他们自己的模块重复使用标准库模块的名称(如果需要标准string库,就不要把新的模块命名为string)。但是,一个包还是有可能意外地隐藏标准库模块。再者,Python 以后可能新增标准库模块,而其名称可能刚好就和自己的一个模块同名。而依赖于没有点号开头相对导入的程序代码同样也不容易理解,因为读者可能对希望使用哪个模块而感到困惑。所以我们最好能在代码中显式地指出导入的解析过程。
⑥ python 模块可以相互导入吗
模块A中import B,而在模块B中import A。这时会怎么样呢?这个在Python列表中由RobertChen给出了详细解释,抄录如下:[A.py]
from B import D
class C:pass
[B.py]
from A import C
class D:pass
为什么执行A的时候不能加载D呢?
如果将A.py改为:import B就可以了。
这是怎么回事呢?
RobertChen:这跟Python内部import的机制是有关的,具体到from B import D,Python内部会分成几个步骤:
在sys.moles中查找符号"B"
果符号B存在,则获得符号B对应的mole对象<mole B>。
从<mole B>的__dict__中获得符号"D"对应的对象,如果"D"不存在,则抛出异常
如果符号B不存在,则创建一个新的mole对象<mole B>,注意,这时,mole对象的__dict__为空。
执行B.py中的表达式,填充<mole B>的__dict__ 。
从<mole B>的__dict__中获得"D"对应的对象,如果"D"不存在,则抛出异常。
所以,这个例子的执行顺序如下:
1、执行A.py中的from B import D
由于是执行的python A.py,所以在sys.moles中并没有<moleB>存在,首先为B.py创建一个mole对象(<moleB>),注意,这时创建的这个mole对象是空的,里边啥也没有,在Python内部创建了这个mole对象之后,就会解析执行B.py,其目的是填充<mole B>这个dict。
2、执行B.py中的from A import C
在执行B.py的过程中,会碰到这一句,首先检查sys.moles这个mole缓存中是否已经存在<moleA>了,由于这时缓存还没有缓存<moleA>,所以类似的,Python内部会为A.py创建一个mole对象(<moleA>),然后,同样地,执行A.py中的语句。
3、再次执行A.py中的from B import D
这时,由于在第1步时,创建的<moleB>对象已经缓存在了sys.moles中,所以直接就得到了<moleB>,但是,注意,从整个过程来看,我们知道,这时<moleB>还是一个空的对象,里面啥也没有,所以从这个mole中获得符号"D"的操作就会抛出异常。如果这里只是importB,由于"B"这个符号在sys.moles中已经存在,所以是不会抛出异常的。
上面的解释已经由Zoom.Quiet收录在啄木鸟了,里面有图,可以参考一下:
⑦ 如何把一个python包导入到python库中
Python 运行环境在查找模块时是对 sys.path 列表进行遍历,如果我们想在运行环境中添加自定义的模块,主要有以下三种方法:
1. 在sys.path列表中添加新的路径(只能对执行了 sys.path.append 命令的当前 Python 运行环境起作用,对其他运行环境不起作用,也即“一次性”的)。
>>> import sys
>>> sys.path
>>> sys.path.append('/home/xxx/yyy') #目录/home/xxx/yyy包含你所需要的包或模块
设置 PYTHONPATH 环境变量(永久性添加):
2. 将包或模块复制到 sys.path 列表中的目录(通过 sys.path 查看)里(如 /home/test/lib/python2.7/site-packages/ 目录)。
3. 最简单的办法是用 .pth 文件来实现。Python 在遍历已有的库文件目录(sys.path中指定)过程中,如果见到一个 .pth 文件,就会将该文件中所记录的路径加入到 sys.path 设置中,这样 .pth 文件说指明的库也就可以被 Python 运行环境找到。
$cd /home/test/lib/python2.7/site-packages/
$touch test.pth
$vim test.pth
$添加一行包或模块所在的目录(如:/home/test/somePackage/)
则test.pth文件内容为:
/home/test/somePackage/
⑧ python form import导入另一个py文件
python导入另一py脚本文件,例如导入xxx.py,命令是from xxx import *;
这个命令得在xxx.py在pythonpath里的时候才有用,或者是和当前在运行的python脚本在同一目录之下。
⑨ Python怎么导入文件
Python的import包含文件功能就跟PHP的include类似,但更确切的说应该更像是PHP中的require,因为Python里的import只要目标不存在就报错程序无法往下执行。要包含目录里的文件,PHP中只需要给对路径就OK。Python中则不同,下面来看看这个例子。
目录结构:
重新执行a.py,一切OK!
⑩ python相对导入
除了让包内导入更加显式,这个功能的一部分设计初衷是,为了帮助脚本解决同名文件出现在模块搜索路径上多个不同位置时的二义性。考虑包目录,这定义了一个名为mypkg 的包,其中含有名为mypkg.main和mypkg.string 的模块。现在,假设模块main试图导入名为string的模块。在 Python 2.X和更早版本中,Python会先寻找mypkg目录以执行相对导入。这会找到并导入位于该处的string.py文件,将其赋值给mypkg.main模块命名空间内的名称string。不过,这一导入的本意可能是要导入Python标准库的string模块。可惜的是,在这些Python版本中,无法直接忽略mypkg.string 去寻找位于模块搜索路径更右侧的标准库中的string模块。此外,我们无法使用完整包导入路径来解决这个问题,因为我们无法依赖在每台机器上的标准链接库路径。换句话说,包中的简单导入可能具有二义性而且容易出错。在包内,我们无法确定imports pam语句指的是包内的模块还是包外的模块。一种可能的后果是,一个局部的模块或包会在不经意间隐藏了sys.path 上的另一个模块。在实践中,Python使用者可以避免为他们自己的模块重复使用标准库模块的名称(如果需要标准string库,就不要把新的模块命名为string)。但是,一个包还是有可能意外地隐藏标准库模块。再者,Python 以后可能新增标准库模块,而其名称可能刚好就和自己的一个模块同名。而依赖于没有点号开头相对导入的程序代码同样也不容易理解,因为读者可能对希望使用哪个模块而感到困惑。所以我们最好能在代码中显式地指出导入的解析过程。