gpt4 book ai didi

python - 当 Python 中的 py_compile 输入路径不同时,abspath 返回不同的结果?

转载 作者:太空狗 更新时间:2023-10-29 12:23:50 26 4
gpt4 key购买 nike

我想知道 python 脚本的绝对路径,然后执行以下步骤。

  1. 通过 py_compile 将其构建为字节码。
  2. 执行它来检查绝对路径。

但是当我执行它时,我得到了2个结果。我发现基于脚本路径的结果后跟py_compile。

这是我的脚本 test.py :

import os
import inspect

print os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))

使用 py_compile 构建它,然后当我输入 test.py 的不同路径 时得到 2 个结果:

1.进入文件夹编译只用脚本名,然后chdir执行

[~]cd /usr/local/bin/
[/usr/local/bin/]python -m py_compile test.py
[/usr/local/bin/]cd ~
[~]python /usr/local/bin/test.pyc
/home/UserXX

2.在其他文件夹下用绝对脚本名编译。

[~]python -m py_compile /usr/local/bin/test.py
[~]python /usr/local/bin/test.pyc
/usr/local/bin

为什么会得到 2 个不同的结果?

最佳答案

当我们想要获取一个python文件的路径时,通常我们可以使用以下任何一种方法:

1.

一)

import os
import inspect
print os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))).replace('\\', '/')

二)

import os
import inspect
print os.path.dirname(os.path.abspath(inspect.stack()[0][1])).replace('\\', '/')

2.

一)

import os
import sys
print os.path.dirname(os.path.abspath(__file__)).replace('\\', '/')

二)

import os
import sys
print os.path.dirname(os.path.abspath(sys.argv[0])).replace('\\', '/')

对于大多数场景,我们使用1就足够了,我们很少使用像2这样的inspect,因为inspect可能会更慢。

我们什么时候使用 2?说使用检查来获取文件路径?

我记得的一个场景是execfile,当fileA.py在其程序中执行fileB.py,而fileA & fileB 不在同一个文件夹中。 (也许更多场景)

那么如果我们在fileB.py中使用__file__,你会发现它的目录和fileA.py一样,因为这里directory 将是调用者的目录。然后我们必须使用 inspect 来获取 fileB.py 的目录。

无论如何,对于您的情况,如果您的test.py 位于调用图的顶部,建议您使用__file__,它更快,无需使用检查。有了这个,如果你使用 -m py_compile,它对你有用。

最后,为什么检查不能使用 -m py_compile?

很遗憾,我没有找到官方文档来解释这一点。但是假设您的 test.py 位于文件夹 tt 中,那么让我们执行 cd ..; python -m py_compile tt/test.py,你会在tt文件夹下得到一个test.pyc

打开这个pyc文件,虽然你会看到一些不适合人类阅读的东西,但你还是可以找到一些蛛丝马迹:一行是这样的:当前帧(^@^@^@^@(^@^@^@^@(^@^@^@^@s^G^@^@^@tt/a.pyt>/p>

你看到pyc文件中已经有文件夹名tt了吗?如果你用inspect.stack()来测试,会更清楚,print inspect.stack()[0][1]会一直把你当前的编译文件夹放在pyc 文件,如果你使用 -m py_compile。这直接意味着在 py_compile 的过程中,一些东西被固定到 pyc 文件中。我称之为 fix 的东西使您可以在与 -m py_compile 相同的文件夹中运行您的程序。

希望这能给你一些线索并对你有所帮助。

关于python - 当 Python 中的 py_compile 输入路径不同时,abspath 返回不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48739550/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com