• Pyhon环境变量的一些坑


    在正常的情况下,使用编译器执行Python文件,无需考虑环境变量的改变

    例:sum

        --one

          --one1.py

        --two

          --two1.py

    在执行one.py文件需要调用 two.py中某个方法,正常在编译器上的使用:from two import two1

    在这里是涉及到一个名词,环境变量

    我们利用Python的环境执行py文件时,需要到对应的目录下执行,但环境变量的出现,让我们在任何目录下可以执行py文件

    查看当前环境变量

    one1.py:

    import os,sys
    for i in sys.path:
        print(i)

    环境变量的操作在编译器已经帮我们做好了,无需我们考虑这些问题

    但在实际的编译环境中并不会用编译器来执行文件,这时会存在一个问题,即当前执行当前文件时,sum目录的环境变量是不存在的,即无法正常调用:from two import two1

    所以需要添加一个sum目录的环境变量

    import os,sys
    sys.path.append(os.path.dirname(os.path.abspath(__file__)) + "/../")  #添加当前文件的上一层目录的环境变量, .. 为上一层目录
    from two import two
    for i in sys.path:
        print(i)

     这时你查看一下是否多了个sum目录的环境变量

    这时的你很开心的以为万事大吉,殊不知在linux环境下还存在一个坑

    Linux中按照以上的目录结构上是无法调用到two1.py文件的,因为我们是调用的是包(packages)下的模块two1.py,但是在上述的目录结构中two是一个文件夹,导致无法调用two1.py文件

    一些关于模块的介绍:

    包(packages)其实也是模块,其类型Type也是module。通常引用自定义模块时有两种方法:
      1)将两个文件放在同一目录下。
      2)在sys.path下添加要引用的py文件的路径。然后import。
    这样的做法,对于少数文件是可行的,但如果程序数目很多,层级很复杂时就比较麻烦了。此时用package就能将多个py文件组织起来,类似于第三方包一样的引用。要方便很多。
    
    package的层次结构与程序所在目录的层次结构相同,且必须包含一个__init__.py的文件。__init__.py可以为空,只要它存在就表明此目录被作为一个package处理。

    so,正确的目录结构如下:

    sum

     --one

      --__init__.py

      --one1.py

     --two

      --__init__.py

      --two1.py

    最后附上一些模块解释的启发的文章:https://blog.csdn.net/maryhuan/article/details/22048763

  • 相关阅读:
    快速幂取模算法详解
    牛客网小白月赛5I区间(差分数组)
    多重背包模板
    hdu5791(DP)
    CodeForces
    最长上升子序列LIS(51nod1134)
    POJ1088(记忆搜索加dp)
    最长公共子序列LCS(POJ1458)
    Gym 100971J-Robots at Warehouse
    模板
  • 原文地址:https://www.cnblogs.com/tang-s/p/9504944.html
Copyright © 2020-2023  润新知