【问题标题】:How do I get the path of the Python script I am running in? [duplicate]如何获取正在运行的 Python 脚本的路径? [复制]
【发布时间】:2010-10-10 08:47:43
【问题描述】:

重复:
In Python, how do I get the path and name of the file that is currently executing?

如何获取我正在运行的 Python 脚本的路径?我在做dirname(sys.argv[0]),但是在 Mac 上我只得到文件名 - 而不是我在 Windows 上做的完整路径。

无论我的应用程序是从哪里启动的,我都想打开与我的脚本文件相关的文件。

【问题讨论】:

  • 杰夫好像忘记了不是所有的python脚本都是模块,请提名重开。
  • @sorin 哦,但他们是;可以为任何脚本文件创建 module 对象。仅仅因为某些东西从未真正得到imported 并不能使它“不是一个模块”。无论如何,答案是相同的:将脚本视为一个模块(如果确实需要,请使用某种引导程序),然后应用相同的技术。
  • 是的,脚本是一个模块,但是这个问得好问题应该重新打开。这里没有回答,“重复”问题不是重复的,因为它只回答了如何获取您已加载的模块的位置,而不是您所在的模块。
  • stackoverflow.com/questions/50499/…查看“导入检查”解决方案
  • @acidzombie24 你不需要完整路径来打开和操作目录中的文件。例如,您可以使用open('images/pets/dog.png'),而 Python 将执行其他操作。

标签: python path


【解决方案1】:
import os
print os.path.abspath(__file__)

【讨论】:

  • 谢谢。这将获得编写代码的 .py 文件的路径,这就是我想要的,即使 OP 想要另一个路径。
  • 这应该与其他答案中的信息相结合:os.path.abspath(os.path.dirname(__file__)) 将给出目录。
【解决方案2】:

潜入 Python 的 7.2:Finding the Path

import sys, os

print('sys.argv[0] =', sys.argv[0])             
pathname = os.path.dirname(sys.argv[0])        
print('path =', pathname)
print('full path =', os.path.abspath(pathname)) 

【讨论】:

  • 我喜欢你的回答如何显示 python 的许多不同变体和功能来解决问题。
  • 如果您通过另一个目录中的另一个脚本调用该脚本,则此不起作用
  • 这可能是我们应该告诉作者的。
  • @SorinSbarnea 查看问题的主题:获取 running 脚本(已执行的脚本)的路径。 imported 模块只是一种资源。
  • 这个问题不是很清楚,但你的解决方案只有在脚本开头调用它才有效(以确保没有人更改当前目录)。我倾向于改用检查方法。 “运行脚本”不一定与“调用脚本”(入口点)或“当前运行脚本”相同。
【解决方案3】:

如果你甚至有相对路径名(在这种情况下它似乎是./),你可以打开相对于你的脚本文件的文件。我使用 Perl,但可以应用相同的通用解决方案:我将目录拆分为一组文件夹,然后将 pop 关闭最后一个元素(脚本),然后将 push(或者对你来说,append)放在任何位置我想要,然后再次加入他们,然后 BAM!我有一个工作路径名,它准确地指向我期望它指向的位置,相对或绝对。

当然,如发布的那样,还有更好的解决方案。我只是有点喜欢我的。

【讨论】:

  • 在 python 中,如果您从完全不同的路径调用脚本,则这不起作用,例如如果你在~ 并且你的脚本在/some-path/script 你会得到./ 等于~ 而不是/some-path 他问的(我也需要)
  • 问题是如何获取模块的路径,而不是如何从另一个构建一个路径名
【解决方案4】:

使用它来获取当前文件的路径。它将解析路径中的任何符号链接。

import os

file_path = os.path.realpath(__file__)

这在我的 Mac 上运行良好。它在 Python 解释器中不起作用(您需要执行 Python 文件)。

【讨论】:

  • 不太确定,这里是 OSX 10.6 NameError: global name '__file__' is not defined的结果
  • Sorin:也许你试过shell中的表达式?
  • 在调用realpath 之前创建一个chdir 并且真实路径将失败,这不是答案。
  • NameError: global name '__file__' is not defined 错误只是表示您忘记了import os
  • NameError: __file__ ... 我已经导入了os。不知道为什么这是公认的答案..?
【解决方案5】:

如果您打算使用 py2exe 编译脚本,则可接受的解决方案将不起作用。如果您打算这样做,这是等效的功能:

os.path.dirname(sys.argv[0])

Py2exe 不提供__file__ 变量。供参考:http://www.py2exe.org/index.cgi/Py2exeEnvironment

【讨论】:

  • 不幸的是,正如 OP 所说,这在 Mac 上不起作用。请参阅sys.argv这是否是完整路径名取决于操作系统
  • (获得真正的跨浏览器解决方案非常复杂......)
  • @Stefano 这不是问题。要确保它是绝对(完整)路径名,请使用 os.path.abspath(...)
  • 当我使用 jupyter notebook 时,这并没有给出感兴趣的 .py 文件的位置
猜你喜欢
  • 2021-04-10
  • 2010-11-12
  • 2011-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-04
  • 2012-11-10
相关资源
最近更新 更多