一文解决python模块导入
python 模块导入 原理
查找是按照 sys.path 中的路径挨个扫描。若都不存在则提示error。
sys.path路径第一个是当前运行脚本所在的目录,其后是PYTHONPATH(一般若步专门设置则为空)设置的目录,在后面是全局包所在目录。
PS:一个目录要有__init__.py才能作为包被导入
示例代码地址:
github
一共四种情况
要导入的包在当前目录
要导入的包在子目录
要导入的包在父目录
要导入的包在兄目录(这种情况和包在其他十万八千里地方一样)
以下是目录结构

以下示例的运行目录都是test_module/sub1
即 python case_.py
case1
要导入的模块和当前运行文件在同一目录,直接import
a.py
print("I'm a.py")
case_1.py
#!/usr/bin/env python
# encoding: utf-8
import a
print('I\'m case_1.py')
输出:
I'm sub1/a.py
I'm case_1.py
case2
子目录建立__init__.py 文件,import subsub.a
case2
#!/usr/bin/env python
# encoding: utf-8
import subsub.a
print('I\'m case_2.py')
输出
I'm subsub/aa.py
I'm case_2.py
case3
两个方法,其一直接改变sys.path内容,使用sys.path.append(),注意这里添加的路径是对于运行该文件时的当前目录来说的;其二设置PYTHONPATH添加父目录
case_3_1
case_3_1.py
#!/usr/bin/env python
# encoding: utf-8
import sys
sys.path.append('../')
import aa
print('I\'m case_3_1.py')
case_3_2
执行case_3_2前 先使用这个命令 export PYTHONPATH=$PYTHONPATH:/home/pb/test_module
case_3_2.py
#!/usr/bin/env python
# encoding: utf-8
import aa
print('I\'m case_3_2.py')
case4
和第三种一样,使用sys.path.append()或者设置PYTHONPATH添加父目录
case_4
#!/usr/bin/env python
# encoding: utf-8
import sys
sys.path.append('../')
import sub2.aa
print('I\'m case_4.py')
其实掌握了sys.path 和PYTHONPATH后目录在哪里都能用这样的stopgap方法搞一下,但是如果是第四种情况还是建议使用virtualenv吧,不然你以后会发疯的。
一文解决python模块导入的更多相关文章
- P4实验问题 解决python模块导入
参考:Python导入自定义包或模块 在执行./run_demo.sh的过程中,遇到了python的模块问题: root@ubuntu:/home/wasdns/tutorials/SIGCOMM_2 ...
- python模块导入细节
python模块导入细节 官方手册:https://docs.python.org/3/tutorial/modules.html 可执行文件和模块 python源代码文件按照功能可以分为两种类型: ...
- 【转】python模块导入细节
[转]python模块导入细节 python模块导入细节 官方手册:https://docs.python.org/3/tutorial/modules.html 可执行文件和模块 python源代码 ...
- python模块导入总结
python模块导入总结 模块导入方式 定义test.py模块 def print_func(): print("hello") import 语句 导入模块语法 import m ...
- 详解Python模块导入方法
python常被昵称为胶水语言,它能很轻松的把用其他语言制作的各种模块(尤其是C/C++)轻松联结在一起.python包含子目录中的模块方法比较简单,关键是能够在sys.path里面找到通向模块文件的 ...
- python 模块导入import和import from区别
模块就是一个.py文件,在名字空间下导入模块导入import和import from,那么python 模块导入import和import from区别是什么呢 1,import 导入模块 impor ...
- python 模块导入
1. 模块导入: 要使用一个模块,我们必须首先导入该模块.Python使用import语句导入一个模块.例如,导入系统自带的模块 math: import math 你可以认为math就是一个指向已导 ...
- python模块导入
官方手册:https://docs.python.org/3/tutorial/modules.html 可执行文件和模块 python源代码文件按照功能可以分为两种类型: 用于执行的可执行程序文件 ...
- python模块导入-软件开发目录规范-01
模块 模块的基本概念 模块: # 一系列功能的结合体 模块的三种来源 """ 模块的三种来源 1.python解释器内置的模块(os.sys....) 2.第三方的别人写 ...
随机推荐
- 【转】GPS定位原理
一.距离测定原理 1.伪距测量 伪距测量是利用全球卫星定位系统进行导航定位的最基本的方法,其基本原理是:在某一瞬间利用GPS接收机同时测定至少四颗卫星的伪距,根据已知的卫星位置 和伪距观测值,采用距离 ...
- win10 store 无法连接网络
当你试过所有的解决攻略 都无效时,那么使用这个教程 关闭以下的蓝色框里的
- selenium打开chrome浏览器代码
import os from selenium import webdriver chromedriver = "C:\Program Files (x86)\Google\Chrome\A ...
- bzoj 4033: [HAOI2015]树上染色 [树形DP]
4033: [HAOI2015]树上染色 我写的可是\(O(n^2)\)的树形背包! 注意j倒着枚举,而k要正着枚举,因为k可能从0开始,会使用自己更新一次 #include <iostream ...
- 自兴人工智能------------python入门基础(2)列表和元祖
一.通用序列操作: 列表中所有序列都可以进行特定的操作,包括索引(indexing).分片(slicing).序列相加(adding).乘法,成员资格,长度,最小值,最大值,下面会一一介绍这些操作法. ...
- [Python Study Notes]CS架构远程访问获取信息--SERVER端
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...
- PLEC-交流电机系统+笔记
1.固有机械特性近似图 2.三相交流电机的控制系统 1)理论推导 第一次制动选择能耗制动,第二次制动选择倒拉制动. 2)模型搭建 3)模拟仿真 3.心得体会和笔记总结 制动方式的选择主要是根据各个制动 ...
- 恢复linux系统文件夹颜色
/etc/DIR_COLORS 默认值 # Background color codes:# 40=black 41=red 42=green 43=yellow 44=blue 45=magenta ...
- Linux 快速执行历史命令,用 !编号
例如: history | grep mysql 使用 !914 可以快速执行上述命令:
- python学习:调用其他函数
vim wc.py #!/usr/bin/python def wordCount(s): chars = len(s) words = len(s.split()) ...