• 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 里,和执行插入步骤的代码在同一个目录里。



  • 相关阅读:
    快速排序
    09-HQL:Group、Order
    08-表属性操作
    07-数据导出及动态分区
    06-数据加载
    05-Hive数据操作
    04-表操作2
    03-表操作1
    [原创]IPV4分组的格式
    mysql中having和where的区别
  • 原文地址:https://www.cnblogs.com/keye/p/15388905.html
Copyright © 2020-2023  润新知