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



  • 相关阅读:
    JavaScript作用域闭包(你不知道的JavaScript)
    Python笔记---错误笔记
    Go语言核心之美 1.5-作用域
    Android经常使用自己定义控件(二)
    Java开发者最经常使用19个Linux命令
    Python: scikit-image binary descriptor
    android 自己定义状态栏和导航栏分析与实现
    程序猿增加新团队的那些坑
    LeetCode 06 ZigZag Conversion
    【UWP通用应用开发】控件、应用栏
  • 原文地址:https://www.cnblogs.com/keye/p/15388905.html
Copyright © 2011-2022 走看看