## Python中的Package和Jupyter中import包问题
前言
关于python包的一些知识
Java中的package概念
我们知道在java中的import package概念, java中的包就是一个目录,里面包含着子目录,子目录套着子目录,当需要引入下层包的时候,需要加一个点以表示分层的概念例如
├─ aaa
├─bbb
│ └─ccc
└─ddd
我们在根目录下,当我们想引用ccc中的ccc中的class的时候,我们可以这样写
import bbb.ccc.*
Python中的包
总体来说python的包机制与Java的差不多,都是目录的形式,不过里面都是py文件
一个标准的Python包
一个标准的Python Package A 应该至少在A目录下包含__init.py__ 文件,例如
sound/ Top-level package
__init__.py Initialize the sound package
formats/ Subpackage for file format conversions
__init__.py
wavread.py
wavwrite.py
aiffread.py
aiffwrite.py
auread.py
auwrite.py
...
effects/ Subpackage for sound effects
__init__.py
echo.py
surround.py
reverse.py
...
filters/ Subpackage for filters
__init__.py
equalizer.py
vocoder.py
karaoke.py
这样的sound包中包含了了3个包,首先sound目录下有_init_.py文件,sound包中包含formats, effects和filters三个包,formats,effects 和filters。 init.py的作用主要是在import python的包的时候做一些初始化工作例如可以这样写
__all__ = ['wavread', 'wavwrite']
如果在formats的init里面写了这句话,表明from sound.formats import * 的时候, 只会引入wavwrite, wavread两个Module。
其他py文件对Module的引用
引用python包的语法主要有两种
import sound
或者
from sound.formats import func
对于第一种写法,表明引入的是整个module,接下来可以使用sound.format.func, 对于第二种写法,from后面必须精确到某个py文件,import表示引入py文件中的某个对象(或是某个类和函数,当然python中函数也是对象)注意,这么写是相对路径,也就是说,能不能引入到你想要的包,和你当前py文件在哪个包很有关系,例如现在在echo.py中想引入formats/wavread.py中的func,必须这么写
from ..formats.wavread import func
func()
参考了这篇博文后需要注意,含有相对路径的py文件是不能直接运行的(包括直接python echo.py或是在sublime中cntl + B等等方法),原因是直接执行python脚本会让该脚本的_name__值变成_main__会影响到相对路径的引用,报错__Attempted relative import in non-package,因此,若是一定需要执行某脚本,必须手动的将当前目录的上层引入,代码如下
import sys
sys.path.append('../')
from ..formats.wavread import func
func()
这样就可以直接运行
待续未完。。。
## Python中的Package和Jupyter中import包问题的更多相关文章
- 如何将项目中的package.json文件中的模块更新到最新版本
有时候自己之前开发的项目回头运行的时候发行好多模块的版本不是最新的,此时想更为为最新版本,使用如下命令即可: npm i -g npm-check-updates ncu -u npm install
- python模块module package
python模块module package module package 常用模块 模块与包的区别 模块分为内置模块.第三方模块,自定义模块 程序会先从内置到第三方再到当前工作目录下去找你导入的 ...
- Python之旅.第四章.模块与包.总结(未完待遇)
一.模块 模块: 一系列功能的集合体,在python中一个py文件就是一个模块,模块名就是py文件的文件名: 模块的好处: 1.减少重复的代码 2.拿来主义 定义模块: 就是创建一个py文件: 使用模 ...
- 如何在Python中快速画图——使用Jupyter notebook的魔法函数(magic function)matplotlib inline
如何在Python中快速画图--使用Jupyter notebook的魔法函数(magic function)matplotlib inline 先展示一段相关的代码: #we test the ac ...
- 基础java中的package的命名规则和import的使用
包的命名一般用公司域名但是注意域名后辍要放前面如下 package com.cnblogs.i.Cat//对应地址是com/cnblos/i/cat.class也就是Cat.class的地址 如果想将 ...
- Java中的package和Import关键字的作用
一.package关键的作用 1.包的概念 package翻译为包,本质上就是一个文件夹,通过包组织项目结构的过程,就是通过包对应的文件夹管理.java和.class文件的过程. 2.包的作用 通过包 ...
- 关于Python Package下的Module import方式[转]
2012年有一个目标我没有达成,那就是深入学习和使用Python语言.这个目标被其他学习任务和工作无情的抢占了,当然最主要的原因还是我重视不够^_^. 近期恰逢有一些Python工程的开发工作要做,就 ...
- 解决TensorFlow在terminal中正常但在jupyter notebook中报错的方案
报错情况: # 本地运行正常,jupyter中无法 import tensorflow ImportError: libcublas.so.10.0: cannot open shared objec ...
- Mac下安装lightgb并在jupyter中使用
1.先安装cmake和gcc brew install cmake brew install gcc 2.下载后确定自己的gcc版本 cd /usr/local/opt/gcc/lib/gcc/ 看到 ...
随机推荐
- 不要怂,就是GAN (生成式对抗网络) (六):Wasserstein GAN(WGAN) TensorFlow 代码
先来梳理一下我们之前所写的代码,原始的生成对抗网络,所要优化的目标函数为: 此目标函数可以分为两部分来看: ①固定生成器 G,优化判别器 D, 则上式可以写成如下形式: 可以转化为最小化形式: 我们编 ...
- Spark_总结四
Spark_总结四 1.Spark SQL Spark SQL 和 Hive on Spark 两者的区别? spark on hive:hive只是作为元数据存储的角色,解析 ...
- 20155304田宜楠 2006-2007-2 《Java程序设计》第二周学习总结
20155304田宜楠 2006-2007-2 <Java程序设计>第二周学习总结 教材学习内容总结 一.类型与变量 1.类型 整数: 可细分为为short整数(占2字节),int整数(占 ...
- JNI只C性能测试
深入学习JNI之前,介绍一个比较好的学习文档:jni详细教程.我这里只是一个Demo测试性能,至于入门教程请看我前一篇博文. Demo展示 这个Demo用于从小到大的冒泡排序,App.java代码: ...
- Jquery 客户端生成验证码
验证码的作用: 1.有效防止这种问题对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试,实际上是用验证码是现在很多网站通行的方式(比如招商银行的网上个人银行,腾讯的QQ社区),我们利用比较简 ...
- C++ 构造函数或析构函数调用虚函数
构造函数和析构函数中的虚函数 在执行基类构造函数时,对象的派生类部分是未初始化的.实际上,此时对象还不是一个派生类对象. 为 了适应这种不完整,编译器将对象的类型视为在构造或析构期间发生了变化.在基类 ...
- Java设计模式之《享元模式》及应用场景
原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6542449.html 享元模式:"享"就是分享之意,指一物被众人共享, ...
- UI-- Empty Application 新建空工程
1> Empty Application 在Xcode 5 中的文件路径 : Xode 5 路径:Contents Developer Platforms iPhoneOS.platfo ...
- MyBastis初次环境配置讲解
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis .20 ...
- FineUIMvc随笔(6)对比WebForms和MVC中表格的数据库分页
声明:FineUIMvc(基础版)是免费软件,本系列文章适用于基础版. 通过对比WebForms和MVC中表格数据库分页代码的不同,可以对 MVC 中的数据流转有更加深入的了解. WebForms 中 ...