参考:https://www.cnblogs.com/yuanchenqi/articles/5732581.html

在linux下给pycharm安装第三方库,需要在.bashrc中加:

因为对应版本的pip在其中。

模块

cal.py

 def add(x,y):
return x+y def sub(x,y):
return x-y print('ok')
x = 3

bin.py

 import sys

 import cal#飘红是因为ide没找到,并不是不存在, 
# 找到cal.py后 ,cal.py中的内容也执行 print(cal.add(3, 5)) print(sys.path)#模块搜索路径 #print(x) NameError: name 'x' is not defined
print(cal.x)

当import cal时,其中所有内容都会被执行,print(打印了) ok。

执行结果:

ok
8
['/home/nizhipeng/PycharmProjects/learnPython/week5/模块项目', '/home/nizhipeng/PycharmProjects/learnPython', '/usr/lib/python35.zip', '/usr/lib/python3.5', '/usr/lib/python3.5/plat-x86_64-linux-gnu', '/usr/lib/python3.5/lib-dynload', '/home/nizhipeng/PycharmProjects/learnPython/venv/lib/python3.5/site-packages', '/home/nizhipeng/PycharmProjects/learnPython/venv/lib/python3.5/site-packages/setuptools-39.1.0-py3.5.egg', '/home/nizhipeng/PycharmProjects/learnPython/venv/lib/python3.5/site-packages/pip-10.0.1-py3.5.egg']
3 Process finished with exit code 0

#####################################################################

只修改bin.py

 from cal import add,sub #从模块里调用方法
print(add(3, 7))
print(sub(3, 6)) #print(x) #NameError: name 'x' is not defined 并没有被加载
#print(cal.x) #NameError: name 'cal'

只加载了add,sub。cal本身都没有被加载,所以第6行会显示错误,x也是同样。

执行结果:

ok
10
-3 Process finished with exit code 0

###########################################################################3

只修改bin.py

 from cal import *
#如果和cal中有重复的函数
def add(x,y):
return x+y+5 print(add(3, 7)) #add执行的是当前的add,而不是cal.py中的add,由执行顺序决定
add执行的是当前的add,而不是cal.py中的add,由执行顺序决定
执行结果:
ok
15 Process finished with exit code 0

from cal import add as plus,可自定义名字。

为了避免模块名冲突,Python又引入了按目录来组织模块的方法,称为包(Package)。

模块是用来组织函数的,包是用来组织模块的。

包中有__init__.py文件。

调用包中的包的函数web包中还有包web2。

bin.py

from web.web2 import logger
logger.logger()

logger.py

#通过bin调用web中的方法

def logger():
print('logger')

执行结果:

logger

Process finished with exit code 0

############################################################################

如果import某一个包,将会执行该包中__init__.py文件。

如果import某一个模块,将会执行模块中程序。

####################################################################################################################################

运行bin.py程序时有如下报错:

找不到模块logger,原因是bin.py中from module import main,相当于将main模块的程序全部写入了bin.py,于是bin.py中有了import logger,但是logger模块并不在bin.py的同级文件夹下,所以并不能找到logger模块(ImportError: No module named 'logger')。

其中logger.py

def logging():
print('loggering')

main.py,bin.py已写出,其他程序为空(bin,module,conf为包,其中有__init__.py)。

只要在main.py文件中将import logger改为from module import logger,就可以正常运行。但是bin.py文件也不是和module包为同级文件,为什么可以运行能?

可在bin.py用sys.path查看,包的寻找路径,发现为:

['/home/nizhipeng/PycharmProjects/ATM/bin', '/home/nizhipeng/PycharmProjects/ATM', '/usr/lib/python35.zip', '/usr/lib/python3.5', '/usr/lib/python3.5/plat-x86_64-linux-gnu', '/usr/lib/python3.5/lib-dynload', '/home/nizhipeng/PycharmProjects/ATM/venv/lib/python3.5/site-packages', '/home/nizhipeng/PycharmProjects/ATM/venv/lib/python3.5/site-packages/setuptools-39.1.0-py3.5.egg', '/home/nizhipeng/PycharmProjects/ATM/venv/lib/python3.5/site-packages/pip-10.0.1-py3.5.egg']

有'/home/nizhipeng/PycharmProjects/ATM',所以可以找到module包。

用命令行可以证明,发现在终端下不能运行,说明有关路径是pycharm加上的,实际上在main.py文件中将import logger改为from module import logger这种方法使程序能够运行是错误的,必须在所有环境中都能运行。

其中第7行在IDE和终端中的执行结果不同,终端输出的是相对路径,而IDE输出的是绝对路径。

其中第11行将上一级路径加到执行环境中,这样程序在终端和IDE下都能正常运行(虽然程序在不同电脑上路径都不一样,但都是bin.py文件的上一级路径)。

#########################################################################

if __name == '__main__':

foo.py

 def hello():
print('hello') if __name__ == '__main__':
hello()

4,5行为测试代码,执行结果:

hello

Process finished with exit code 0

如果foo.py作为模块被调用,测试代码不会被执行。

bin.py

import foo foo.hello()

执行结果:

hello

Process finished with exit code 0

bin.py执行结果,__name__为__main__。

若foo.py作为模块被调用时,其中的__name__为foo,即模块名。

Python(模块&包)的更多相关文章

  1. (转载)Linux平台下安装 python 模块包

    https://blog.csdn.net/aiwangtingyun/article/details/79121145 一.安装Python Windows平台下: 进入Python官网下载页面下载 ...

  2. 羞羞的Python模块包

    目录 一.pip 二.pip常用命令 三.No module 'xxxxx' 四.写在最后   前言 写Python代码的时候,经常会遇到包的问题,但是都是遇到一次,搜索一次,解决了.下一次还是同样的 ...

  3. Python模块包(pycharm右键创建文件夹和python package的区别)中__init__.py文件的作用

    在eclipse中用pydev开发Python脚本时,我遇到了一个这样的现象,当我新建一个pydev package时,总会自动地生成一个空的__init__.py文件,因为是python新手,所以很 ...

  4. python模块, 包的初识

    Python 模块(Module), 是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句. 模块让你能够有逻辑地组织你的 Python 代码段. 把相关的代 ...

  5. 18.Python模块包(pycharm右键创建文件夹和python package的区别)中__init__.py文件的作用

    原来在python模块的每一个包中,都有一个__init__.py文件(这个文件定义了包的属性和方法)然后是一些模块文件和子目录,假如子目录中也有 __init__.py 那么它就是这个包的子包了.当 ...

  6. Python模块/包/库安装几种方法(转载)

    一.方法1: 单文件模块直接把文件拷贝到 $python_dir/Lib 二.方法2: 多文件模块,带setup.py 下载模块包(压缩文件zip或tar.gz),进行解压,CMD->cd进入模 ...

  7. Python——模块&包&异常

    模块&包&异常 一. 模块 Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义(变量)和Python语句. 模块能定义函数 ...

  8. Python模块包中__init__.py文件的作用

    转载自:http://hi.baidu.com/tjuer/item/ba37ac4ce7482a0f6dc2f08b 模块包: 包通常总是一个目录,目录下为首的一个文件便是 __init__.py. ...

  9. python模块与包的导入

    1. 模块与包的区别 模块,即module,一个包含python语句的.py文件就是一个模块!每个源代码文件都会自动成为模块!没有额外的语法用来声明模块. 包,又称模块包,即module packag ...

  10. Python札记 -- 使用easy_install进行模块/包管理

    今天在阅读以前项目代码时,发现里面使用的第三方模块的参数相当诡异,总是对不上.经过分析之后,发现是自己安装的第三方模块跟项目使用的版本不一致.在Python中进行模块/包管理的话,就不得不提到easy ...

随机推荐

  1. 取消Eclipse的Error Reporting

    选择Preferences->General->Error Reporting,Send Mode选择Never send reports

  2. x64位windows 2003 server中“Server 对象 错误 'ASP 0177 : 800700c1' Server.CreateObject 失败”问题

    给朋友看一个老asp网站图片不能上传问题,试过网上各种办法都提示: Server 对象 错误 'ASP 0177 : 800700c1' Server.CreateObject 失败 最终问题出在x6 ...

  3. Master节点部署

    一.部署Kubernetes API服务部署 准备安装包 [root@linux-node1 ~]# cd /usr/local/src/kubernetes [root@linux-node1 ku ...

  4. U盘修复技巧

    目前,U盘的使用已经非常普遍,人们经常用U盘来备份.携带.转移文件.但是,如果将U盘从USB口拔出之前,忘记了执行卸载*作,或者执行卸载*作不彻底,或者由于误*作,而直接将U盘从USB口拔了出来,就有 ...

  5. Luogu 4433 [COCI2009-2010#1] ALADIN

    LOJ 2958 线段树 + 类欧 主要矛盾就是$\sum\limits_{i = l}^{r}Ai \mod B$怎么做. 拆成前缀和相减的形式,有 $$\sum_{i = 0}^{r}(Ai \m ...

  6. Python中解码decode()与编码encode()与错误处理UnicodeDecodeError: 'gbk' codec can't decode byte 0xab

    编码方法encoding() 描述 encode() 方法以指定的编码格式编码字符串,默认编码为 'utf-8'.将字符串由string类型变成bytes类型. 对应的解码方法:bytes decod ...

  7. 【转】java.sql.SQLException: statement is closed语句被关闭 druid连接池报错

    我之前在用druid 1.0.28版本也出现过这个问题, 现象就是: 报这个错的时候, 往往会出现在一条毫无错误的sql执行上报错,  sql放到数据库上执行或者单独拎出来执行完全没问题, 但是为什么 ...

  8. redis windows下安装

    1.下载redis windows文件包 下载地址 2.解压文件包 复制压缩包地址 3.进入cmd 命令行 cd进入redis文件包目录 4.执行 redis-server.exe  使用netsta ...

  9. 匹配yyyy-mm-dd日期格式的的正则表达式[转]

    转http://www.jb51.net/article/28034.htm 今天头让我修改个javascript方法,验证输入的日期是否符合要求.恩.我们的要求是yyyy-mm-dd这样的格式,其他 ...

  10. VS中的Debug 和 Release 编译方式的本质区别

    VS中的Debug 和 Release 编译方式的本质区别 Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序.Release 称为发布版本,它往往是进行了各种优化,使 ...