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



  • 相关阅读:
    杂项收集,包括-发邮件、二维码生成、文件下载、压缩、导出excel
    SQL2008删除大量数据
    优秀程序设计的18大原则
    多线程基础
    SQL金典
    [读书笔记]高效程序员的45个习惯:敏捷开发修炼之道
    Unity 查找资源引用工具
    Unity自动生成各种机型分辨率效果工具
    Unity Editor模式 Invoke()函数 失效
    Unity 特效 粒子 自动播放
  • 原文地址:https://www.cnblogs.com/keye/p/15388905.html
Copyright © 2011-2022 走看看