sys.path 和 os.getcwd() 意见不一



我在当前目录下有一个名为 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()引用。

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

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

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

我经历过Mac OSX上os.getcwd()的行为与它在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 等于 ~,这显然是相同的。

假设您位于包含子目录d和目录/中,d具有如下f.py的python文件:

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]输出执行的文件所在的目录。

注意:两条路径似乎都是绝对路径(也称为完整路径(。

相关内容

  • 没有找到相关文章

最新更新