python是如何找到对应的package的?
我们在写python代码或者阅读别人的代码时,可能会碰到对应module无法找到的问题,这时如何解决呢?我们如果对python解释器如何查找对应的module有比较深刻的理解,那么我们就可以轻松解决相关问题。
https://leemendelowitz.github.io/blog/how-does-python-find-packages.html
sys.path
import sys
print('\n'.join(sys.path))
# 当前目录
D:\devenv\Code\intro_ds\knowhow
D:\devenv\Code\intro_ds
# anaconda
D:\Continuum\Anaconda3\python35.zip
D:\Continuum\Anaconda3\DLLs
D:\Continuum\Anaconda3\lib
D:\Continuum\Anaconda3
D:\Continuum\Anaconda3\lib\site-packages
D:\Continuum\Anaconda3\lib\site-packages\Sphinx-1.4.6-py3.5.egg
D:\Continuum\Anaconda3\lib\site-packages\win32
D:\Continuum\Anaconda3\lib\site-packages\win32\lib
D:\Continuum\Anaconda3\lib\site-packages\Pythonwin
D:\Continuum\Anaconda3\lib\site-packages\setuptools-27.2.0-py3.5.egg
上面看到sys.path目录包含了当前脚本所在的目录以及对应安装site环境,那么问题来了:
sys.path是如何被赋值的
从python的文档中https://docs.python.org/2/library/sys.html#sys.path看到:sys.path使用当前的工作目录,以及罗列在PYTHONPATH环境变量中的目录,再加上installation-dependent default paths(这是由site模块来控制的)
如果你的PYTHONPATH环境变量并没有设置,则sys.path将包含:当前工作目录+site模块执行的目录变更。当你启动python时,site模块自动被imported加载。
https://docs.python.org/2/library/site.html#module-site
操作sys.path
import sys, os # This won't work - there is no hi module
import hi
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named hi # Create a hi module in your home directory.
home_dir = os.path.expanduser("~")
my_module_file = os.path.join(home_dir, "hi.py")
with open(my_module_file, 'w') as f:
f.write('print "hi"\n')
f.write('a=10\n') # Add the home directory to sys.path
sys.path.append(home_dir) # Now this works, and prints hi!
import hi
print hi.a
module的__file__属性
当你import一个module时,你可以通过查看__file__属性来找到该module具体存在于哪个目录中:
> import numpy
> numpy.__file__
'/usr/local/lib/python2.7/dist-packages/numpy/__init__.pyc'
注意,以上对于静态编译到解释器的内置module不适用,比如sys模块就没有__file__属性
imp模块
python是如何找到对应的package的?的更多相关文章
- python项目内import其他内部package的模块的正确方法
转载 :https://blog.csdn.net/u011089523/article/details/52931844 本文主要介绍如何在一个Python项目中,优雅的实现项目内各个package ...
- Python(模块(modue)、包(package))
''' 一 模块 模块一共三种: python标准库 第三方模块 应用程序自定义模块 模块两种执行方式: 1 用于启动执行 2 用于被调用执行 key:import module: 将执行文件(mod ...
- 21.python的模块(Module)和包(Package)
目录 模块(Module)和包(Package) 模块(modue)的概念 模块导入方法 1.import 语句 2.from-import 语句 3.from-import* 语句 4.运行本质 i ...
- python的模块(module)和包(package)机制:import和from..import..
在python用import或者from...import来导入相应的模块. 模块其实就一些函数和类的集合文件,它能实现一些相应的功能,当我们需要使用这些功能的时候,直接把相应的模块导入到我们的程序中 ...
- 使用poco 的NetSSL_OpenSSL 搭建https 服务端,使用C++客户端,java 客户端访问,python访问(python还没找到带证书访问的代码.)
V20161028 由于项目原因,需要用到https去做一些事情. 这儿做了一些相应的研究. 这个https 用起来也是折腾人,还是研究了一周多+之前的一些积累. 目录 1,java client 通 ...
- Python:当你遇到了the package “public”?
前几天跑github上的一个python项目,先都是看看需要哪些模块哪些包,安装配置好环境的.可是看到 import public我眉头一皱,觉得事情并不简单! 所以准备扒一扒!当然项目需要也是真的哈 ...
- Python中模块(Module)和包(Package)的区别
本文绝大部分内容转载至:廖雪峰官方网站 1. 模块(Module) 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函 ...
- Python教你找到最心仪的对象
规则 单身妹妹到了适婚年龄,要选对象.候选男子100名,都是单身妹妹没有见过的.百人以随机顺序,从单身妹妹面前逐一经过.每当一位男子在单身妹妹面前经过时,单身妹妹要么选他为配偶,要么不选.如果选他,其 ...
- 漫漫人生路,我们该何去何从! Python让我找到了方向
互联网寒冬 2017年冬天,是我人生中最难熬的一个冬天,其实2017年的冬天并不算太冷,比这冬日的寒风还要严寒的要属这所谓的"互联网寒冬"吧!各大厂裁员的消息充斥着互联网,互联网表 ...
随机推荐
- Win下Eclipse提交Hadoop程序出错:org.apache.hadoop.security.AccessControlException: Permission denied: user=D
描述:在Windows下使用Eclipse进行Hadoop的程序编写,然后Run on hadoop 后,出现如下错误: 11/10/28 16:05:53 INFO mapred.JobClient ...
- 【优化】bigpipe技术
一.什么是bigpipe Bigpipe是Facebook工程师提出了一种新的页面加载技术. BigPipe是一个重新设计的基础动态网页服务体系.大体思路是,分解网页成叫做Pagelets的小块,然后 ...
- 【优化】Filddler用于移动端
Fiddler是一个非常强大的Web调试工具,它能捕获所有客户端和服务器的http和https请求,我们可以对请求监视.设置断点,也能修改输入输出数据,这些特性使得Fiddler成为广大web开发者的 ...
- Javac语法糖之TryCatchFinally
https://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.20.3 Optionally replace a try s ...
- Types方法之upperBound-lowerBound-isUnbounded-containsType
1.upperBound(Type t)方法 /** * The "rvalue conversion". * The upper bound of most types is t ...
- NMS—卷积神经网络
1-传统的NMS NMS,非极大值抑制,在很多计算机视觉问题中有着重要应用,尤其是目标检测领域. 以人脸检测为例,通常的流程为3步: (1)通过滑动窗口或者其它的object proposals方法产 ...
- redis-springboot-redistemplate更改序列化方式
redisTemplate 默认的序列化方式为 jdkSerializeable, StringRedisTemplate的默认序列化方式为StringRedisSerializer 可以通过手动配置 ...
- Docker容器打包成镜像 - OpenDaylight官方 SDN Hub Tutorial VM 的docker镜像
由于工作需要,在看OpenDaylight (一个SDN的开源控制器) 官方Tutorial有一个比较基础且介绍比较详细的文档(http://sdnhub.org/tutorials/opendayl ...
- AspxGridView中行的双击事件
ClientSideEvents-RowDblClick="clike" function clike(s, e) { grdList.GetRowKey(e. ...
- 湘潭校赛 Bob's Problem
Bob's Problem Accepted : 18 Submit : 115 Time Limit : 1000 MS Memory Limit : 65536 KB 题目描述 Bob今 ...