【问题标题】:How to get the PYTHONPATH in shell?如何在 shell 中获取 PYTHONPATH?
【发布时间】:2013-04-22 14:28:33
【问题描述】:
debian@debian:~$ echo $PYTHONPATH  
/home/qiime/lib/:  
debian@debian:~$ python  
Python 2.7.3 (default, Jan  2 2013, 16:53:07)   
[GCC 4.7.2] on linux2  
Type "help", "copyright", "credits" or "license" for more information.  
>>> import sys  
>>> sys.path  
['', '/usr/local/lib/python2.7/dist-packages/feedparser-5.1.3-py2.7.egg',   
'/usr/local/lib/python2.7/dist-packages/stripogram-1.5-py2.7.egg', '/home/qiime/lib', 
'/home/debian', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-linux2',   
'/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-
dynload',   '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', 
'/usr/lib/python2.7/dist-packages/PIL', '/usr/lib/python2.7/dist-packages/gst-0.10',  
'/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.7']    

如何在 bash 中获取所有 PYTHONPATH 输出?
为什么echo $PYTHONPATH不能全部搞定?

【问题讨论】:

标签: python linux pythonpath


【解决方案1】:

随便写:

只需在终端中输入which python,您就会看到您正在使用的python 路径。

【讨论】:

  • 这是 python 可执行文件的路径而不是 PYTHONPATH。 PYTHONPATH 是 python 自己查找要导入的模块的地方。
  • Python本身存在的路径叫做PYTHON_HOME或者PYTHONHOME
【解决方案2】:

Python 在启动时将一堆值加载到 sys.path(通过字符串列表“实现”),包括:

  • 各种硬编码的地方
  • $PYTHONPATH的值
  • 可能是启动文件中的一些内容(我不确定 Python 是否有 rcfiles

$PYTHONPATH 只是sys.path 最终值的一部分。

如果您追求sys.path 的值,最好的方法是询问Python(感谢@Codemonkey):

python -c "import sys; print sys.path"

【讨论】:

    【解决方案3】:

    你也可以试试这个:

    Python 2.x:
    python -c "import sys; print '\n'.join(sys.path)"

    Python 3.x:
    python3 -c "import sys; print('\n'.join(sys.path))"

    输出将更具可读性和简洁性,如下所示:

    /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7 /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload /Library/Python/2.7/site-packages /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/PyObjC

    【讨论】:

    • 请注意第二行代码有错别字。它应该是“python”,而不是“python3”。
    • @Pauli 不是错字。一种(旧)约定是将 Python 2.7 安装为“python”,将 Python 3.x 安装为“python3”。
    【解决方案4】:

    添加到 @zzzzzzz 答案后,我运行了命令:python3 -c "import sys; print(sys.path)",与使用 python 的同一命令相比,它为我提供了不同的路径。使用python3 显示的路径是“面向python3”的。

    查看两个不同命令的输出:

    python -c "import sys; print(sys.path)"

    ['', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk ', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', ' /usr/local/lib/python2.7/dist-packages/setuptools-39.1.0-py2.7.egg', '/usr/lib/python2.7/dist-packages']

    python3 -c "import sys; print(sys.path)"

    ['', '/usr/lib/python36.zip', '/usr/lib/python3.6', '/usr/lib/python3.6/lib-dynload', '/usr/local/ lib/python3.6/dist-packages', '/usr/lib/python3/dist-packages']

    这两个命令都是在我的 Ubuntu 18.04 机器上执行的。

    【讨论】:

      【解决方案5】:

      环境变量PYTHONPATH实际上只是添加到Python搜索模块的位置列表中。您可以像这样在终端中打印出完整列表:

      python -c "import sys; print(sys.path)"
      

      或者如果想要 UNIX 目录列表样式的输出(由 : 分隔),您可以这样做:

      python -c "import sys; print(':'.join(x for x in sys.path if x))"
      

      这将输出如下内容:

      /usr/local/lib/python2.7/dist-packages/feedparser-5.1.3-py2.7.egg:/usr/local/lib/
      python2.7/dist-packages/stripogram-1.5-py2.7.egg:/home/qiime/lib:/home/debian:/us
      r/lib/python2.7:/usr/lib/python2.7/plat-linux2:/usr/lib/python2.7/lib-tk:/usr/lib
      /python2.7/lib-old:/usr/lib/python2.7/lib-dynload:/usr/local/lib/python2.7/dist-
      包:/usr/lib/python2.7/dist-packages:/usr/lib/python2.7/dist-packages/PIL:/u
      sr/lib/python2.7/dist-packages/gst-0.10:/usr/lib/python2.7/dist-packages/gtk-2.0:
      /usr/lib/pymodules/python2.7

      【讨论】:

      • 系统路径是否与 PYTHONPATH 相同?
      • @variable 不,PYTHONPATH 中的路径会在 Python 解释器启动时添加到 sys.path 中的路径中。换句话说,sys.path 将包括PYTHONPATH 中的所有路径,但也包括其他路径,例如 Python 标准库的路径和已安装包的路径。
      • 好的,请您告诉我如何获取 PYTHONPATH 的值?
      • @variable 在 bash 中 echo $PYTHONPATH,在 Python 3 中 import os; print(os.environ["PYTHONPATH"])
      • 这给了我语法错误(在扫描字符串文字时指向导入词的结尾 - EOL):python -c 'import os;打印(os.environ [“PYTHONPATH”])'。如果我使用双引号,那么它会说“未定义名称'PYTHONPATH'”
      【解决方案6】:

      我们这些使用 Python 3.x 的人应该这样做:

      python -c "import sys; print(sys.path)"
      

      【讨论】:

        猜你喜欢
        • 2019-05-17
        • 2013-02-25
        • 2018-11-02
        • 1970-01-01
        • 2010-11-12
        • 2011-09-13
        • 2017-07-27
        • 2015-12-25
        相关资源
        最近更新 更多