【问题标题】:sys.path and os.getcwd() in disagreement?sys.path 和 os.getcwd() 存在分歧?
【发布时间】:2017-11-15 23:25:18
【问题描述】:

我的当前目录下有一个名为sub/code.py 的python 脚本。 sub 目录有其他脚本和一个__init__.py,因此它充当一个包。

从我的当前目录:

python -i sub/code.py
>>> import sys
>>> sys.path[0]
'/home/name/folder/current_directory/sub'
>>> import os
>>> os.getcwd()
'/home/name/folder/current_directory'
>>> 

os.getcwd()sys.path[0] 应该以这种方式不同意吗?据我了解,它们都应该引用当前目录,但在这种情况下只有os.getcwd() 可以。

【问题讨论】:

    标签: python python-3.x path sys


    【解决方案1】:

    假设您在包含子目录d 的目录/ 中,并且目录d 有一个python 文件f.py 如下:

    import os
    import sys
    
    print(f'sys.path[0]: {sys.path[0]}')
    print(f'os.getcwd(): {os.getcwd()}')
    

    然后python ./d/f.py会输出:

    sys.path[0]: /d
    os.getcwd(): /
    

    如果您将目录更改为/d(使用 cd /d),则python ./f.y 将输出:

    sys.path[0]: /d
    os.getcwd(): /d
    

    从这些结果(在带有 python 3.8 的 Linux Unbuntu 上)看来:

    • os.getcwd() 输出命令所在的目录 执行并
    • sys.path[0]输出你执行的文件所在的目录。

    注意:两条路径似乎都是绝对路径(又名完整路径)。

    【讨论】:

      【解决方案2】:

      这并不能真正回答 OP 的问题。

      我体验到 os.getcwd() 在 Mac OSX 上的行为与其所做的行为相比有所不同,例如在 php 中。

      test_getcwd.py:

      from os import getcwd
      print (getcwd())
      

      输出当前用户路径,而不是运行脚本的路径:

      Michaels-MacBook-Air:~ michag$ python3 /Users/michag/Documents/aaa_raspbian/ddpos_ddpi_3/boot/test_getcwd.py
      /Users/michag
      

      其中/Users/michag等于~,显然是一样的。

      【讨论】:

        【解决方案3】:

        根据我的经验,sys.path[0] 是一个空字符串,计算结果为当前目录。

        也许您的sub 模块中有代码可以操作sys.path

        【讨论】:

        • 绝对不是,sys 甚至没有被导入。
        猜你喜欢
        • 1970-01-01
        • 2023-03-30
        • 2021-05-28
        • 2016-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-18
        • 1970-01-01
        相关资源
        最近更新 更多