zoukankan      html  css  js  c++  java
  • Linux 将文件夹添加到 sys.path


    1、问题

    添加 Python 代码到 sys.path 里。



    2、解决方案

    有两种常用的方式。

    第一:使用 pythonpath 环境变量来添加。

    [root@localhost ~]# vim ~/.bashrc 
    export PYTHONPATH=/some/dir:/other/dir python3
        
    [root@localhost ~]# source ~/.bashrc 
    

    查看结果:

    [root@localhost ~]# python
    Python 3.7.3 (default, Mar 27 2019, 22:11:17) 
    [GCC 7.3.0] :: Anaconda, Inc. on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import sys
    >>> sys.path
    ['', '/some/dir', '/other/dir', '/usr/local/anaconda3/lib/python37.zip', '/usr/local/anaconda3/lib/python3.7', '/usr/local/anaconda3/lib/python3.7/lib-dynload', '/usr/local/anaconda3/lib/python3.7/site-packages']
    
    


    第二:site-packages 下创建 .pth 文件。

    [root@localhost ~]# cd /usr/local/anaconda3/lib/python3.7/site-packages
    [root@localhost site-packages]# vim myapplication.pth 
    /some/dir
    /other/dir
    
    [root@localhost site-packages]# source myapplication.pth 
    -bash: /some/dir: 是一个目录
    -bash: /other/dir: 是一个目录
    

    前提要确保目录 /some/dir/other/dir 存在。

    .pth 文件必须放在 site-packages 里,里面的内容(文件目录)可以是任何位置。


    查看结果:

    [root@localhost site-packages]# python
    Python 3.7.3 (default, Mar 27 2019, 22:11:17) 
    [GCC 7.3.0] :: Anaconda, Inc. on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import sys
    >>> sys.path
    ['', '/usr/local/anaconda3/lib/python37.zip', '/usr/local/anaconda3/lib/python3.7', '/usr/local/anaconda3/lib/python3.7/lib-dynload', '/usr/local/anaconda3/lib/python3.7/site-packages', '/some/dir', '/other/dir']
    
    


    3、讨论

    比起费力找文件,更倾向于用代码调节 sys,path 的值。

    import sys
    sys.path.insert(0, '/some/dir')
    sys.path.insert(0, '/other/dir')
    

    虽然这个能 “工作”,但极为脆弱,避免使用。

    这种方法问题是:将目录名硬编码到源代码。如果代码被移到新位置,会产生维护问题。


    更好的做法,不修改源代码,将 path 配置到其他地方。

    如果我们使用模块级的变量来构造一个绝对路径,可以解决硬编码目录问题。如__file__

    import sys
    from os.path import abspath, join, dirname
    sys.path.insert(0, join(abspath(dirname(__file__)), 'src'))
    

    src 目录添加到 path 里,和执行插入步骤的代码在同一个目录里。



  • 相关阅读:
    layui穿梭框右侧增加上移下移功能
    java.lang.NullPointerException出现的几种原因:
    springboot+thymeleaf+mybatis 基础学习
    Vue 生命周期扫盲
    Token 认证(Asp.Net)
    从具体化“system.decimal”类型到“system.string”类型的指定强制转换无效
    【C#】委托和Lambda表达式
    Visual Studio 2017添加visionPro控件
    从WinForm程序中看委托和事件
    西门子PLC通讯-仿真环境搭建
  • 原文地址:https://www.cnblogs.com/keye/p/15388905.html
Copyright © 2011-2022 走看看