python包的导入

1.如何把一个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/

2.python 类和继承,包及模块导入 求解答

一 .module 通常模块为一个文件,直接使用import来导入就好了。

可以作为module的文件类型有".py"、".pyo"、".pyc"、".pyd"、".so"、".dll"。二. package通常包总是一个目录,可以使用import导入包,或者from + import来导入包中的部分模块。

包目录下为首的一个文件便是 __init__.py。然后是一些模块文件和子目录,假如子目录中也有 __init__.py 那么它就是这个包的子包了。

一.模块你可以使用import语句将一个源代码文件作为模块导入.例如:[python] view plain copy# file : spam.py a = 37 # 一个变量 def foo: # 一个函数 print "I'm foo" class bar: # 一个类 def grok(self): print "I'm bar.grok" b = bar() # 创建一个实例 使用import spam 语句就可以将这个文件作为模块导入。系统在导入模块时,要做以下三件事:1.为源代码文件中定义的对象创建一个名字空间,通过这个名字空间可以访问到模块中定义的函数及变量。

2.在新创建的名字空间里执行源代码文件.3.创建一个名为源代码文件的对象,该对象引用模块的名字空间,这样就可以通过这个对象访问模块中的函数及变量,如: [python] view plain copyimport spam # 导入并运行模块 spam print spam.a # 访问模块 spam 的属性 spam.foo() c = spam.bar() 用逗号分割模块名称就可以同时导入多个模块:[python] view plain copyimport socket, os, regex 模块导入时可以使用 as 关键字来改变模块的引用对象名字:[python] view plain copyimport os as system import socket as net, thread as threads system.chdir("..") net.gethostname() 使用from语句可以将模块中的对象直接导入到当前的名字空间. from语句不创建一个到模块名字空间的引用对象,而是把被导入模块的一个或多个对象直接放入当前的名字空间:[python] view plain copyfrom socket import gethostname # 将gethostname放如当前名字空间 print gethostname() # 直接调用 socket.gethostname() # 引发异常NameError: socket from语句支持逗号分割的对象,也可以使用星号(*)代表模块中除下划线开头的所有对象:[python] view plain copyfrom socket import gethostname, socket from socket import * # 载入所有对象到当前名字空间 不过,如果一个模块如果定义有列表__all__,则from module import * 语句只能导入__all__列表中存在的对象。[python] view plain copy# module: foo.py __all__ = [ 'bar', 'spam' ] # 定义使用 `*` 可以导入的对象 另外, as 也可以和 from 联合使用:[python] view plain copyfrom socket import gethostname as hostname h = hostname() import 语句可以在程序的任何位置使用,你可以在程序中多次导入同一个模块,但模块中的代码*仅仅*在该模块被首次导入时执行。

后面的import语句只是简单的创建一个到模块名字空间的引用而已。sys.modules字典中保存着所有被导入模块的模块名到模块对象的映射。

这个字典用来决定是否需要使用import语句来导入一个模块的最新拷贝.from module import * 语句只能用于一个模块的最顶层.*特别注意*:由于存在作用域冲突,不允许在函数中使用from 语句。 每个模块都拥有 __name__ 属性,它是一个内容为模块名字的字符串。

最顶层的模块名称是 __main__ .命令行或是交互模式下程序都运行在__main__ 模块内部. 利用__name__属性,我们可以让同一个程序在不同的场合(单独执行或被导入)具有不同的行为,象下面这样做:[python] view plain copy# 检查是单独执行还是被导入 if __name__ == '__main__': # Yes statements else: # No (可能被作为模块导入) statements 模块搜索路径导入模块时,解释器会搜索sys.path列表,这个列表中保存着一系列目录。一个典型的sys.path 列表的值:Linux:['', '/usr/local/lib/python2.0', '/usr/local/lib/python2.0/plat-sunos5', '/usr/local/lib/python2.0/lib-tk', '/usr/local/lib/python2.0/lib-dynload', '/usr/local/lib/python2.0/site-packages']Windows:['', 'C:\\WINDOWS\\system32\\python24.zip', 'C:\\Documents and Settings\\weizhong', 'C:\\Python24\\DLLs', 'C:\\Python24\\lib', 'C:\\Python24\\lib\\plat-win', 'C:\\Python24\\lib\\lib-tk', 'C:\\Python24\\Lib\\site-packages\\pythonwin', 'C:\\Python24', 'C:\\Python24\\lib\\site-packages', 'C:\\Python24\\lib\\site-packages\\win32', 'C:\\Python24\\lib\\site-packages\\win32\\lib', 'C:\\Python24\\lib\\site-packages\\wx-2.6-msw-unicode']空字符串 代表当前目录. 要加入新的搜索路径,只需要将这个路径加入到这个列表. 模块导入和汇编到现在为止,本章介绍的模块都是包含Python源代码的文本文件. 不过模块不限于此,可以被 import 语句导入的模块共有以下四类: •使用Python写的程序( .py文件)•C或C++扩展(已编译为共享库或DLL文件)•包(包含多个模块)•内建模块(使用C编写并已链接到Python解释器内)当查询模块 foo 时,解释器按照 sys.path 列表中目录顺序来查找以下文件(目录也是文件的一种): 1.定义为一个包的目录 foo2.foo.so, foomodule.so, foomodule.sl,或 foomodule.dll (已编译扩展)3.foo.pyo (只在使用 -O 或 -OO 选项时)4.foo.pyc5.foo.py对于.py文件,当一个模块第一次被导入时,它就被。

3.python命名空间包导入算法

要理解命名空间包,需从底层去学习包导入操作在Python 3.3中是如何完成的。

在导入过程中,3.3版本与3.2和之前的版本一样,依旧会遍历模块搜索路径sys.path中的每个目录。然而,在3.3版本中,当对每个模块搜索路径中的directory搜索名为spam的被导人包时,Python会按照下面的顺序测试一系列更广的匹配条件:1.如果找到directory\spaml_init__.py,便会导入一个常规包并返回。

2.如果找到directoryspam.ipy,pyc,或其他模块扩展名},便会导人一个简单模块并返回。3.如果找到文件夹directorylspam,便会将其记录下来,而扫描将从搜索路径中的下一个目录继续。

4.如果上述的所有都没有找到,扫描将从搜索路径中的下一个目录继续。如果搜索路径扫描结束后没有从上述步骤1和步骤2中返回一个模块或包,而同时在上述步骤3中至少记录了一个路径,那么就会创建一个命名空间包。

命名空间包的创建会立即发生,而且不会推迟到一个子层级的导入发生之时。新的命名空间包有一个_path_属性,该属性被设置为在上述步骤3中扫描并记录的目录路径字符串的可迭代对象,但是没有_file_属性。

path_属性在随后更深的访问过程中用于搜索所有包组件。命名空间包的_path_中每个被记录的项目,都会在进一步嵌套的项目被请求时进行搜索,这很像一个常规包的单独路径。

从另一方面看,命名空间包的_path_属性对于更低层次组件的关系,和sys.path对于顶层最左侧的包导入路径的关系是一样的。命名空间包成为了访问更低层次项目的“父路径”,这一访问也使用了上面介绍的四个步骤。

最终的结果是一个命名空间包是一种对多个目录的虚拟拼接,这些目录可以位于多个sys.path项目中。然而一旦一个命名空间包被创建,它和一个常规包之间并没有功能上的区别,它能够支持我们所学过的常规包的一切功能,包括包相对导入语法。

4.Python导入模块或包需要注意哪些点

Python是一种面向对象的编程语言,里面包含有丰富强大的库,想要学习Python开发,首先需要学习如何导入模块或包。

下面就跟大家一起讨论下Python导入模块的几种方法:常规导入 最常用的导入方式,大概是这样的:import sys 只需要使用 import ,然后指定希望导入的模块或包即可。用这种方法导入的好处是可以一次性导入多个包或模块: import os, sys, time 虽然这节省了空间,但是却违背了Python风格指南。

Python风格指南建议将每个导入语句单独成行 。 有时在导入模块时,你想要重命名这个模块。

这个功能很容易实现:import sys as system print(system.platform) 上面的代码将我们导入的 sys 模块重命名为 system 。我们可以按照和以前一样的方式调用模块的方法,但是可以用一个新的模块名。

也有某些子模块必须要使用点标记法才能导入。 import urllib.error 这个情况不常见,但是对此有所了解总是没有坏处的。

使用from语句导入 有时我们只想要导入一个模块或库中的某个部分。那么Python是如何实现这点:from functools import lru_cache 上面这行代码可以让你直接调用 lru_cache 。

如果按常规方式导入 functools ,那么就必须像这样调用 lru_cache : functools.lru_cache(*args) 根据实际的使用场景,上面的做法可能是更好的。在复杂的代码库中,能够看出某个函数是从哪里导入的这点很有用的。

不过,如果你的代码维护的很好,模块化程度高,那么只从某个模块中导入一部分内容也是非常方便和简洁的。当然,你还可以使用from方法导入模块的全部内容,就像这样:from os import * 这种做法在少数情况下是挺方便的,但是这样也会打乱你的命名空间。

问题在于,你可能定义了一个与导入模块中名称相同的变量或函数,这时如果你试图使用 os 模块中的同名变量或函数,实际使用的将是你自己定义的内容。因此,你最后可能会碰到一个相当让人困惑的逻辑错误。

标准库中我唯一推荐全盘导入的模块只有Tkinter 。 如果你正好要写自己的模块或包,有人会建议你在 __init__.py 文件中导入所有内容,让模块或者包使用起来更方便。

我个人更喜欢显示地导入,而非隐式地导入。 你也可以采取折中方案,从一个包中导入多个项:from os import path, walk, unlinkfrom os import uname, remove 在上述代码中,我们从 os 模块中导入了5个函数。

你可能注意到了,我们是通过多次从同一个模块中导入实现的。当然,如果你愿意的话,你也可以使用圆括号一次性导入多个项: from os import (path, walk, unlink, uname, remove, rename) 这是一个有用的技巧,不过你也可以换一种方式:from os import path, walk, unlink, uname, \ remove, rename 上面的反斜杠是Python中的续行符,告诉解释器这行代码延续至下一行。

相对导入 PEP 328 介绍了引入相对导入的原因,以及选择了哪种语法。具体来说,是使用句点来决定如何相对导入其他包或模块。

这么做的原因是为了避免偶然情况下导入标准库中的模块产生冲突。这里我们以PEP 328中给出的文件夹结构为例,看看相对导入是如何工作的: my_package/ __init__.py subpackage1/ __init__.py module_x.py module_y.py subpackage2/ __init__.py module_z.py module_a.py 在本地磁盘上找个地方创建上述文件和文件夹。

在顶层的 __init__.py 文件中,输入以下代码: from . import subpackage1from . import subpackage2 接下来进入 subpackage1 文件夹,编辑其中的 __init__.py 文件,输入以下代码: from . import module_xfrom . import module_y 现在编辑 module_x.py 文件,输入以下代码: from .module_y import spam as ham def main(): ham() 最后编辑 module_y.py 文件,输入以下代码: def spam(): print('spam ' * 3) 打开终端, cd 至 my_package 包所在的文件夹,但不要进入 my_package 。在这个文件夹下运行Python解释器。

我使用的是IPython,因为它的自动补全功能非常方便: In [1]: import my_package In [2]: my_package.subpackage1.module_xOut[2]: In [3]: my_package.subpackage1.module_x.main()spam spam spam 相对导入适用于你最终要放入包中的代码。如果你编写了很多相关性强的代码,那么应该采用这种导入方式。

你会发现PyPI上有很多流行的包也是采用了相对导入 。还要注意一点,如果你想要跨越多个文件层级进行导入,只需要使用多个句点即可。

不过, PEP 328建议相对导入的层级不要超过两层 。 还要注意一点,如果你往 module_x.py 文件中添加了 if __name__ == '__main__' ,然后试图运行这个文件,你会碰到一个很难理解的错误。

编辑一下文件,试试看吧! from . module_y import spam as ham def main(): ham() if __name__ == '__main__': # This won't work! main() 现在从终端进入 subpackage1 文件夹,执行以下命令: python module_x.py 如果你使用的是Python 2,你应该会看到下面的错误信息:Traceback (most recent call last): File "module_x.py", line 1, in from . module_y import spam as 。

5.python 第三方包 source怎么导入

我们知道,定义在环境变量PYTHONPATH里是可以直接用import导入的。下面我们来操作如何从非pythonpath目录导入第三方包或者自己定义的包。

假定我们的包有如下的目录结构:person 是最顶层的包,man、woman、child是子包

person\

__init__.py

person.py

man\

__init__.py

goodman.py

child\

__init__.py

lovelychild.py

woman\

__init__.py

goodwoman.py

首先,我们把包所在目录(c:\testpackage)加入到sys.path路径里

>>> import sys

>>> sys.path.append("c:\\testpackage")

注意:路径分隔符一定要写成”\\”的

1、用import方式 导入包,此种方式必须写全包的路径

>>> import person.person

>>> person.person.printperson()

person

>>> import person.man.goodman

>>> person.man.goodman.printman()

man

>>> import person.woman.goodwoman

>>> person.woman.goodwoman.printwoman()

woman

>>> import person.man.child.lovelychild

>>> person.man.child.lovelychild.printchild()

child

2、用from * import *方式导入包

>>> from person import person

>>> person.printperson()

person

>>> from person.man import goodman

>>> goodman.printman()

man

>>> from person.man.child import lovelychild

>>> lovelychild.printchild()

child

>>> from person.woman import goodwoman

>>> goodwoman.printwoman()

woman

也可以用以下方式:

>>> from person import *

>>> person.printperson()

person

>>> from person.man import *

>>> goodman.printman()

man

>>> from person.man.child import *

>>> lovelychild.printchild()

child

注意:这样的语句会导入哪些文件取决于操作系统的文件系统;所以我们在__init__.py 中加入 __all__ 变量;该变量包含执行这样的语句时应该导入的模块的名字;它由一个模块名字符串列表组成。

6.python中怎样导入机器学习的算法包

对于原始数据我们要将其一部分分为train data,一部分分为test data。

train data用于训练,test data用于测试准确率。在test data上测试的结果叫做validation error。

将一个算法作用于一个原始数据,我们不可能只做出随机的划分一次train和test data,然后得到一个validation error,就作为衡量这个算法好坏的标准。因为这样存在偶然性。

我们必须好多次的随机的划分train data和test data,分别在其上面算出各自的validation error。这样就有一组validation error,根据这一组validation error,就可以较好的准确的衡量算法的好坏。

cross validation是在数据量有限的情况下的非常好的一个evaluate performance的方法。而对原始数据划分出train data和test data的方法有很多种,这也就造成了cross validation的方法有很多种。

sklearn中的cross validation模块,最主要的函数是如下函数:sklearn.cross_validation.cross_val_score。他的调用形式是scores = cross_validation.cross_val_score(clf, raw data, raw target, cv=5, score_func=None)参数解释:clf是不同的分类器,可以是任何的分类器。

比如支持向量机分类器。clf = svm.SVC(kernel='linear', C=1)cv参数就是代表不同的cross validation的方法了。

如果cv是一个int数字的话,并且如果提供了raw target参数,那么就代表使用StratifiedKFold分类方式,如果没有提供raw target参数,那么就代表使用KFold分类方式。cross_val_score函数的返回值就是对于每次不同的的划分raw data时,在test data上得到的分类的准确率。

至于准确率的算法可以通过score_func参数指定,如果不指定的话,是用clf默认自带的准确率算法。还有其他的一些参数不是很重要。

cross_val_score具体使用例子见下:>>> clf = svm.SVC(kernel='linear', C=1)>>> scores = cross_validation.cross_val_score(。 clf, raw data, raw target, cv=5)。

>>> scores array([ 1. 。, 0.96。

, 0.9 。, 0.96。

, 1. ])除了刚刚提到的KFold以及StratifiedKFold这两种对raw data进行划分的方法之外,还有其他很多种划分方法。但是其他的划分方法调用起来和前两个稍有不同(但是都是一样的),下面以ShuffleSplit方法为例说明:>>> n_samples = raw_data.shape[0]>>> cv = cross_validation.ShuffleSplit(n_samples, n_iter=3,。

test_size=0.3, random_state=0)>>> cross_validation.cross_val_score(clf, raw data, raw target, cv=cv)。 array([ 0.97。

, 0.97。, 1. ])。

7.python 包导入问题,求解

用绝对路径啊。你用相对路径,谁知道你现在的workdir是在哪里啊。 eclipse这个pydev虽然很好用,不过太重了,通常都用sublimetext的。

你可以这样子。

假设你的pag1在某个目录"xxxx/pag1"里

不要用#, 而是这样写

import os

import sys

sys.path.append(os.path.absdir("xxxx"))

sys.path.append(os.path.absdir("xxxx/pag1"))

import pag1

import pag1.Phone

from pag1.Phone import fun1虽然有些罗嗦,不过这样写可以容易定位出问题。

要用绝对路径。不要用双斜杠。 要用单个反斜杠作为目录的分隔符。这样就有通用性。也比较省事。

python包的导入

转载请注明出处代码入门网 » python包的导入

资讯

udppython

阅读(20)

本文主要为您介绍udppython,内容包括python支不支持tipc通讯,如何用python方法检测UDP端口,如何用python方法检测UDP端口。肯定支持socket()函数用于根据指定的地址族、数据类型和协议来分配一个套接口的描述字及其所用的资源。如果协议prot

资讯

centos升级python

阅读(26)

本文主要为您介绍centos升级python,内容包括centos中如何将python更新到最新的版本,如何在centos下更改默认版本的python,centos系统系统怎样升级python到python3。1.下载Python-2.7.3 [plain] view plain copy print? #wget #wget 2.解压

资讯

python的自动化测试

阅读(18)

本文主要为您介绍python的自动化测试,内容包括python自动化测试的工具,怎么用python做自动化测试,如何用python做自动化测试。1新建一台Jenkins服务器,安装并配置好Jenkins2配置一个自动化测试脚本的代码库,可以使用Git或者SVN等版本控制工具

资讯

pythonif缩进

阅读(24)

本文主要为您介绍pythonif缩进,内容包括python缩进问题,代码如下,pythonif语句缩进,python中if和else怎么缩进。第二种情况很好理解for n in range(2,14):for x in range(2,n):if n%x==0:print n,

资讯

python中文手册

阅读(18)

本文主要为您介绍python中文手册,内容包括python中文教程,Python学习手册的目录,求《Python学习手册》(第四版)中文版pdf,非常感谢。《Python3 教程》Python3 基础语法Python3 基本数据类型Python3 解释器Python3 注释Python3 运

资讯

python文件目录

阅读(23)

本文主要为您介绍python文件目录,内容包括Python中文件和目录有什么区别,用python把文件夹下的所有文件包括文件夹里面的文件都拷贝到同一个,python中怎样将文件拷贝到指定的目录下。(path, path1):forf inos.listdir(path):ifos.p

资讯

python的缩进

阅读(19)

本文主要为您介绍python的缩进,内容包括python缩进问题,python的缩进问题,关于python缩进问题。交互模式在使用块语句(if, while, try)时,在结束块语句时,要输入额外的回车的。交互模式只会一个命令一个命令地执行,块语句视

资讯

python的测试框架

阅读(22)

本文主要为您介绍python的测试框架,内容包括python单元测试框架,当前PYTHON常用的测试框架,Python自动化测试框架?。日志类,用于测试时日志记录 pyapilog.py 1 # -*-coding:utf-8 -*- 2 # !/usr/bin/pyth

资讯

pythoncentos升级

阅读(20)

本文主要为您介绍pythoncentos升级,内容包括centos中如何将python更新到最新的版本,centos中如何将python更新到最新的版本,centos怎么升级python。1.下载Python-2.7.3 [plain] view plain copy print? #wget #wget 2.解压 [pl

资讯

Pythoncsv读取

阅读(21)

本文主要为您介绍Pythoncsv读取,内容包括python怎么读csv文件,python怎么读取csv文件,python中怎么读取csv文件。什么是CSV就是内容用逗号隔开,后缀是.csv的文件。它可以被任何一个文本编辑器打开。如果用excel打开,它又可以是这样的:END读C

资讯

python2.7

阅读(22)

本文主要为您介绍python2.7,内容包括关于下载python2.7,如何在Windows7安装Python2.7,哪里可以下载到支持python2.7的pcapy呢。python的安装主要由以下四个步骤: 下载:首先是从官方网站下载python的安装包(注意选择操作系统和机器字长:32bit|64

资讯

python网页抓取

阅读(19)

本文主要为您介绍python网页抓取,内容包括如何用Python爬虫抓取网页内容?,如何用python从网页上抓取数据,怎样用python爬取网页。首先,你要安装requests和BeautifulSoup4,然后执行如下代码. 1 2 3 4 5 6 7 8 9 10 11 12

资讯

golang与python

阅读(21)

本文主要为您介绍golang与python,内容包括Python,Ruby,Go语言哪个更值得学习,go和python哪个好,golang还是不如python好用。豆瓣http://www.douban.com/group/topic/46948882/?cid=579722942知乎http://

资讯

python空的list

阅读(21)

本文主要为您介绍python空的list,内容包括python编程问题,编写关于list的问题,python中的list,python3,将空的一个list,在每个循环中append上一个字符串,结果第。list是一个函数,将参数强制转换成列表 list((1,4,7)) 对元组(1,4,7)使用list函数

资讯

udppython

阅读(20)

本文主要为您介绍udppython,内容包括python支不支持tipc通讯,如何用python方法检测UDP端口,如何用python方法检测UDP端口。肯定支持socket()函数用于根据指定的地址族、数据类型和协议来分配一个套接口的描述字及其所用的资源。如果协议prot

资讯

centos升级python

阅读(26)

本文主要为您介绍centos升级python,内容包括centos中如何将python更新到最新的版本,如何在centos下更改默认版本的python,centos系统系统怎样升级python到python3。1.下载Python-2.7.3 [plain] view plain copy print? #wget #wget 2.解压

资讯

python的自动化测试

阅读(18)

本文主要为您介绍python的自动化测试,内容包括python自动化测试的工具,怎么用python做自动化测试,如何用python做自动化测试。1新建一台Jenkins服务器,安装并配置好Jenkins2配置一个自动化测试脚本的代码库,可以使用Git或者SVN等版本控制工具

资讯

pythonif缩进

阅读(24)

本文主要为您介绍pythonif缩进,内容包括python缩进问题,代码如下,pythonif语句缩进,python中if和else怎么缩进。第二种情况很好理解for n in range(2,14):for x in range(2,n):if n%x==0:print n,

资讯

python中文手册

阅读(18)

本文主要为您介绍python中文手册,内容包括python中文教程,Python学习手册的目录,求《Python学习手册》(第四版)中文版pdf,非常感谢。《Python3 教程》Python3 基础语法Python3 基本数据类型Python3 解释器Python3 注释Python3 运

资讯

python文件目录

阅读(23)

本文主要为您介绍python文件目录,内容包括Python中文件和目录有什么区别,用python把文件夹下的所有文件包括文件夹里面的文件都拷贝到同一个,python中怎样将文件拷贝到指定的目录下。(path, path1):forf inos.listdir(path):ifos.p

资讯

python的缩进

阅读(19)

本文主要为您介绍python的缩进,内容包括python缩进问题,python的缩进问题,关于python缩进问题。交互模式在使用块语句(if, while, try)时,在结束块语句时,要输入额外的回车的。交互模式只会一个命令一个命令地执行,块语句视

资讯

windows安装python

阅读(22)

本文主要为您介绍windows安装python,内容包括怎么在WINDOWS系统中安装Python,如何在windows下安装python,如何在Windows系统中安装Python。从官方网站下载Python根据不同的版本下载不通的安装包,这里先介绍WINDOWS怎么安装下载好安装包后双