zoukankan      html  css  js  c++  java
  • python是如何找到对应的package的?

    我们在写python代码或者阅读别人的代码时,可能会碰到对应module无法找到的问题,这时如何解决呢?我们如果对python解释器如何查找对应的module有比较深刻的理解,那么我们就可以轻松解决相关问题。

    https://leemendelowitz.github.io/blog/how-does-python-find-packages.html

    sys.path

    import sys
    print('
    '.join(sys.path))
    # 当前目录
    D:devenvCodeintro_dsknowhow
    D:devenvCodeintro_ds
    # anaconda
    D:ContinuumAnaconda3python35.zip
    D:ContinuumAnaconda3DLLs
    D:ContinuumAnaconda3lib
    D:ContinuumAnaconda3
    D:ContinuumAnaconda3libsite-packages
    D:ContinuumAnaconda3libsite-packagesSphinx-1.4.6-py3.5.egg
    D:ContinuumAnaconda3libsite-packageswin32
    D:ContinuumAnaconda3libsite-packageswin32lib
    D:ContinuumAnaconda3libsite-packagesPythonwin
    D:ContinuumAnaconda3libsite-packagessetuptools-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"
    ')
      f.write('a=10
    ')
    
    # 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模块

  • 相关阅读:
    CIA泄露资料分析(黑客工具&技术)—Windows篇
    包学会之浅入浅出Vue.js:结业篇
    包学会之浅入浅出Vue.js:升学篇
    包学会之浅入浅出Vue.js:开学篇
    Manacher算法详解
    CSP-S 2019 游记
    洛谷 P3373 【模板】线段树 2
    AHOI 2009 维护序列
    洛谷 P4017 最大食物链计数
    洛谷 SP14932 LCA
  • 原文地址:https://www.cnblogs.com/kidsitcn/p/9407500.html
Copyright © 2011-2022 走看看