python工程的目录结构
㈠ python import路径是什么
以下为纯手打,下面给几个demos:
说明:
moles所在的目录在python里叫package, 下面是一个名为 IsDir的package(实际上就是一个目录), package下面有4个moles(A, B, C, D)和一个__init__.py文件,目录结构如下:
IsDir/A.py B.py C.py D.py __init__.py大体来讲,有两种方法可以调用某目录下(包括递归目录)的moles.
一. __init__.py为空时
1.1 以下为调用moleA的代码:
#!/usr/bin/env pythonfrom IsDir import AA.say()输出:
This is mole A!1.2 如果想调用moleA,B,C,D呢?
方法1.
#!/usr/bin/env pythonfrom IsDir import Afrom IsDir import Bfrom IsDir import Cfrom IsDir import DA.say()B.say()C.say()D.say()方法2.
#!/usr/bin/env pythonimport IsDir.Aimport IsDir.Bimport IsDir.Cimport IsDir.Dfrom IsDir import *A.say()B.say()C.say()D.say()错误示例1:
#!/usr/bin/env pythonimport IsDir.AA.say()错误示例2:
#!/usr/bin/env pythonfrom IsDir import *A.say()错误的原因:
IsDir/目录下__init__.py 为空时,直接import IsDir.A 或者from IsDir import *是无效的.
从官方文档里可以看到,__init__.py 里没有__all__ = [mole1,mole2,...]时,
from IsDir import * 只能保证IsDir被imported, 所以此时IsDir里的moles是无法被imported,此时只有如我上面所写的代码所示才能正确执行,否则是错误的。官方解释为:import IsDir.A并无任何意义,只有接着执行from IsDir import *后,import IsDir.A语句里的mole A才会被定义,所以完整的调用因改为: 1. import IsDir.A 2. from IsDir import *。二. __init__.py用all=[...]指定该package下可以被imported进去的mole
__init__.py里写入如下内容:
% cat IsDir/__init__.py__all__ = ["A","B"]然后使用之:
#!/usr/bin/env pythonfrom IsDir import *A.say()B.say()结果:
% python test.py This is mole A!This is mole B!错误实例:
#!/usr/bin/env pythonfrom IsDir import *C.say()以上示例之所以错误,是因为C并没有在__all__ = ["A","B"]里制定,由此可见,package IsDir下面的__init__.py里,__all__=[...]具有隔离moles的作用。
补充:
mole A, B, C,D里我分别只定义了一个method, 例如,以下为mole A的code:
% cat IsDir/A.pydef say(): print "This is mole A!"后记:
谢谢这位同学,回答你的问题感觉很有收获,顺便又把python温习了一遍。回头把这些总结贴到我的blog上以上为手写,望采纳,共勉。
=============================================================
老子写了这么多居然采用了另一个简陋的答案,mlgb的,枉我熬夜给你答题。这种白痴楼主就不配在这里问问题。
㈡ 怎么样理解一个python项目的各种文件
在Python中引用是非常简单的事情,这里需要清楚三个概念就可以了包、模块、类。类这个就不用说了。
模块对应的是一个.py文件,那么mole_name就是这个文件去掉.py之后的文件名,py文件中可以直接定义一些变量、函数、类。
那么包我们可以看作一个包含__init__.py和一系列.py文件的文件夹,这样做的目的是为了区别包和普通字符串。
importmole_name
frompackage_nameimportmole_name
frompackage_nameimport *
那么如何import时,python解释器如何才能找到该模块放置的文件位置呢?python寻找模块的优先级如下:
1、当前文件目录
2、环境变量PYTHONPATH
3、sys.path(list类型)
sys.path是list类型,我们可以通过insert(), append()方法来增加模块导入的搜索路径,如:
import sys
path = “……” #需要增加的路径
sys.path.insert(0, path)
在import模块时,该模块的顶层代码将会被执行一次。如果该模块被import多次,例如import A, import B.其中B模块本身也有import A,那么只在第一次被import的时候顶层代码会被执行。
模块能像包含函数定义一样,可包含一些可执行语句。这些可执行语句通常用来进行模块的初始化工作。这些语句只在模块第一次被导入时被执行。这非常重要,有些人以为这些语句会多次导入多次执行,其实不然。
模块在被导入执行时,python解释器为加快程序的启动速度,会在与模块文件同一目录下生成.pyc文件。我们知道python是解释性的脚本语言,而.pyc是经过编译后的字节码,这一工作会自动完成,而无需程序员手动执行。
什么时候你应该使用frommoleimport?
如果你要经常访问模块的属性和方法,且不想一遍又一遍地敲入模块名,使用frommoleimport。
如果你想要有选择地导入某些属性和方法,而不想要其它的,使用frommoleimport。
如果模块包含的属性和方法与你的某个模块同名,你必须使用importmole来避免名字冲突。
除了这些情况,剩下的只是风格问题了,你会看到用两种方式编写的Python代码。
尽量少用from mole import *,因为判定一个特殊的函数或属性是从哪来的有些困难,并且会造成调试和重构都更困难。
其它要点:
包
在创建许许多多模块后,我们可能希望将某些功能相近的文件组织在同一文件夹下,这里就需要运用包的概念了。包对应于文件夹,使用包的方式跟模块也类似,唯一需要注意的是,当文件夹当作包使用时,文件夹需要包含__init__.py文件,主要是为了避免将文件夹名当作普通的字符串。__init__.py的内容可以为空,一般用来进行包的某些初始化工作或者设置__all__值,__all__是在from package-name import *这语句使用的,全部导出定义过的模块。
那么我们平常新建文件的时候,都是建一个.py文件(类似java,但是python不用建立类,是以模块为载体)至于怎样组织包就要功能需要了
在C/C++/Java中,main是程序执行的起点,Python中,也有类似的运行机制,但方式却截然不同:Python使用缩进对齐组织代码的执行,所有没有缩进的代码(非函数定义和类定义),都会在载入时自动执行,这些代码,可以认为是Python的main函数。
每个文件(模块)都可以任意写一些没有缩进的代码,并且在载入时自动执行,为了区分主执行文件还是被调用的文件,Python引入了一个变量__name__,当文件是被调用时,__name__的值为模块名,当文件被执行时,__name__为'__main__'。这个特性,为测试驱动开发提供了极好的支持,我们可以在每个模块中写上测试代码,这些测试代码仅当模块被Python直接执行时才会运行,代码和测试完美的结合在一起。
典型的Python文件结构:
python import模块方法
python包含子目录中的模块方法比较简单,关键是能够在sys.path里面找到通向模块文件的路径。
下面将具体介绍几种常用情况:
(1)主程序与模块程序在同一目录下:
如下面程序结构:
`-- src
|-- mod1.py
`-- test1.py
若在程序test1.py中导入模块mod1, 则直接使用importmod1或from mod1 import *;
(2)主程序所在目录是模块所在目录的父(或祖辈)目录
如下面程序结构:
`-- src
|-- mod1.py
|-- mod2
| `-- mod2.py
`-- test1.py
若在程序test1.py中导入模块mod2, 需要在mod2文件夹中建立空文件__init__.py文件(也可以在该文件中自定义输出模块接口); 然后使用 from mod2.mod2 import * 或import mod2.mod2.
(3)主程序导入上层目录中模块或其他目录(平级)下的模块
如下面程序结构:
`-- src
|-- mod1.py
|-- mod2
| `-- mod2.py
|-- sub
| `-- test2.py
`-- test1.py
若在程序test2.py中导入模块mod1和mod2。首先需要在mod2下建立__init__.py文件(同(2)),src下不必建立该文件。然后调用方式如下:
下面程序执行方式均在程序文件所在目录下执行,如test2.py是在cd sub;之后执行python test2.py
而test1.py是在cd src;之后执行python test1.py; 不保证在src目录下执行python sub/test2.py成功。
import sys
sys.path.append("..")
import mod1
import mod2.mod2
(4)从(3)可以看出,导入模块关键是能够根据
㈢ Python学习手册的目录
《Python3 教程》
Python3 基础语法
Python3 基本数据类型
Python3 解释器
Python3 注释
Python3 运算符
Python3 数字(Number)
Python3 字符串
Python3 列表
Python3 元组
Python3 字典
Python3 编程第一步
Python3 条件控制
Python3 循环语句
Python3 迭代器与生成器
Python3 函数
Python3 数据结构
Python3 模块
Python3 输入和输出
Python3 File
Python3 OS
Python3 错误和异常
Python3 面向对象
Python3 标准库概览
Python3 实例
Python3 正则表达式
Python3 CGI编程
Python3 MySQL
Python3 网络编程
Python3 SMTP发送邮件
Python3 多线程
Python3 XML解析
Python3 JSON
Python3 日期和时间
Python3 内置函数
㈣ 请教个pyqt做显示目录结构的问题
默认通过PyQt设计的界面是没有代码的,只会生成为一个.ui的文件(D:\Programs\Python\Lib\site-packages\PyQt4\uic)。我们就是通过Python提供的工具将这个文件转换为Python的脚本,具体方法如下: 在ui所在的文件夹下执行下面的命令:pyuic.py ...
㈤ Python 蛋疼的单元测试,有什么好的目录结构
根目录下建立一个 tests
然后按照 test_UNIT.py 这种格式来命名,如果代码量较多则根据功能建立些子文件夹来分分类,就好了
可以参考 requests, django 的源码来看
㈥ python怎样爬取网站目录结构
抓取每一页的所有a标签,采集所有href属性,分离域名,把此网站域名下的地址标记为采集入库条件,然后计算第一次采集到的地址的hash,如果hash重复,则不入库,否则入库再迭代二次采集,直到所有href的hash都复为结束条件,程序则认为数据库中已采集到此域下的所有地址,即可以开始抓站
㈦ 如何设计结构清晰的 Python 工程目录结构
1. 使用专业的项目构建发布工具来构建项目目录. 如 buildout . 其目录结构绝对比自己创建来的漂亮.
2. log目录最好不要放到项目里
3. 缺少 setup.py
4. 缺少 requirements.txt
㈧ python import 路径问题 新手
以下为纯手打,下面给几个demos:
说明:
moles所在的目录在python里叫package, 下面是一个名为 IsDir的package(实际上就是一个目录), package下面有4个moles(A, B, C, D)和一个__init__.py文件,目录结构如下:
IsDir/
A.pyB.pyC.pyD.py__init__.py
大体来讲,有两种方法可以调用某目录下(包括递归目录)的moles.
一. __init__.py为空时
1.1以下为调用moleA的代码:
#!/usr/bin/envpython
fromIsDirimportA
A.say()
输出:
ThisismoleA!
1.2 如果想调用moleA,B,C,D呢?
方法1.
#!/usr/bin/envpython
fromIsDirimportA
fromIsDirimportB
fromIsDirimportC
fromIsDirimportD
A.say()
B.say()
C.say()
D.say()
方法2.
#!/usr/bin/envpython
importIsDir.A
importIsDir.B
importIsDir.C
importIsDir.D
fromIsDirimport*
A.say()
B.say()
C.say()
D.say()
错误示例1:
#!/usr/bin/envpython
importIsDir.A
A.say()
错误示例2:
#!/usr/bin/envpython
fromIsDirimport*
A.say()
错误的原因:
IsDir/目录下__init__.py为空时,直接importIsDir.A或者fromIsDirimport*是无效的.
从官方文档里可以看到,__init__.py 里没有__all__=[mole1,mole2,...]时,
fromIsDirimport* 只能保证IsDir被imported, 所以此时IsDir里的moles是无法被imported,
此时只有如我上面所写的代码所示才能正确执行,否则是错误的。官方解释为:importIsDir.A并无任何意义,只有接着执行fromIsDirimport*后,importIsDir.A语句里的moleA才会被定义,所以完整的调用因改为: 1. import IsDir.A 2. from IsDir import *。
二. __init__.py用all=[...]指定该package下可以被imported进去的mole
__init__.py里写入如下内容:
%catIsDir/__init__.py
__all__=["A","B"]
然后使用之:
#!/usr/bin/envpython
fromIsDirimport*
A.say()
B.say()
结果:
%pythontest.py
ThisismoleA!
ThisismoleB!
错误实例:
#!/usr/bin/envpython
fromIsDirimport*
C.say()
以上示例之所以错误,是因为C并没有在__all__=["A","B"]里制定,由此可见,packageIsDir下面的__init__.py里,__all__=[...]具有隔离moles的作用。
补充:
mole A, B, C,D里我分别只定义了一个method, 例如,以下为mole A的code:
%catIsDir/A.py
defsay():
print"ThisismoleA!"
后记:
谢谢这位同学,回答你的问题感觉很有收获,顺便又把python温习了一遍。回头把这些总结贴到我的blog上以上为手写,望采纳,共勉。
=============================================================
老子写了这么多居然采用了另一个简陋的答案,mlgb的,枉我熬夜给你答题。这种白痴楼主就不配在这里问问题。
㈨ python 创建骨架目录结构的命令在哪里输入,怎么输入
你问的这些在python命令行中都无法实现 python命令行只是一个python命令执行环境,和linux命令行完全不一样