zoukankan      html  css  js  c++  java
  • python的导包问题

    有事会遇到在python代码中导入包错误问题,本文简单对python包的引入做简单介绍

    简单说,我认为python导包一共有3种情况,分别是:

    要导的包与当前文件在同一层
    要导的包在当前文件的底层(就是与当前文件夹同级的文件夹里)
    要导的包在当前文件的上层


    1、要导的包与当前文件在同一层

    use.py
    
    
    source.py

    use.py表示包的调用方,source.py则是被调用方(下面的几种情况同)
    这种情况下直接from 文件名 import 函数/类/变量 就行了
    如 from source import Source
    运行use.py 会成功输出success

    要导的包在当前文件的底层


    新建一个wrap文件夹,把source.py放进去
    这时use.py导入source.py应该是
    from wrap.source import Source
    如果里面有多层结构,多用几个点就能解决了

    要导的包在当前文件的上层
    这种情况是最复杂的一种,我们把上面那种情况的source.py和wrap.py换个位置

    现在use.py在wrap文件夹里面了,而source.py跑到wrap文件夹外面了
    现在use.py要调用source.py应该怎么样调用呢
    这时候就需要把文件根目录放入,python包的搜索路径里面。

    大家想一想我们调用pip下来的包或者模块的时候,从来都不需要指定什么路径吧,直接使用包名或者模块名就能使用了,比如 import os。
    这正是因为pip下来的包或模块所在的文件夹处于python默认的搜索路径里面。py文件import文件的时候,先在当前目录找,找不到就去python的搜索路径里找,因此我们只需要把当前工程的根目录放入python的搜索路径就可以了。
    具体操作如下:

    在导入我们想导入的包之前,把当前项目的根目录放入python的搜索路径种,这样就能成功导入了。

    os.path.dirname(file)

    这句的代码的意思是:获取当前文件所在目录的相对路径,当前文件所在文件夹的相对路径就是 **.**了。

    os.path.abspath(os.path.dirname(file))

    这句代码的意思是把上面获取的相对路径变成绝对路径,我这里是D: estwrap,也就是use.py所在文件夹的绝对路径。

    os.path.dirname( os.path.abspath(os.path.dirname(file)))

    这句代码的意思是获取上面所得到的路径的上一级路径,我这里就得到了D: est,这个也是我的项目的根路径。

    sys.path.insert(0,BASE_DIR)

    这句代码表示把BASE_DIR写入到python搜索路径里。
    以上写法并非固定,大家根据自己的文件夹结构来写
    这样我的D: est这个路径就加入到python搜索路径中了。
    现在我导入Source,只需要这样写 from source import Source,因为source在D: est目录下,所以能搜索到,同理D: est的子文件夹里的文件导入方式就可以写出 from wrap.source import Source,注意从插入的根路径开始写路径就行了

  • 相关阅读:
    有关LinkedList常用方法的源码解析
    [Kotlin参考]一、总览-(7)多平台编
    [Kotlin参考]一、总览-(3)Kotlin for JavaScript
    [Kotlin参考]一、总览-(4)Kotlin原生
    [Kotlin参考]一、总览-(5)Kotlin数据科学
    [Kotlin参考]一、总览-(2)Android版Kotlin
    [Kotlin参考]一、总览-(1)服务器端Kotlin
    [Swift]LeetCode1312. 让字符串成为回文串的最少插入次数 | Minimum Insertion Steps to Make a String Palindrome
    [Swift]LeetCode1311. 获取你好友已观看的视频 | Get Watched Videos by Your Friends
    [Swift]LeetCode1310. 子数组异或查询 | XOR Queries of a Subarray
  • 原文地址:https://www.cnblogs.com/lxbmaomao/p/10345001.html
Copyright © 2011-2022 走看看