【问题标题】:A system independent way using python to get the root directory/drive on which python is installed使用 python 获取安装 python 的根目录/驱动器的一种独立于系统的方式
【发布时间】:2012-08-16 00:16:25
【问题描述】:

对于 Linux,这将给我/,对于 C 驱动器上的 Windows,我将给我C:\\。注意windows的C盘不一定要安装python。

【问题讨论】:

  • 在linux上,根目录不一定在安装python的同一个驱动器上。这取决于系统的分区方式(单驱动器或多驱动器)。
  • 您可以使用来自 sys (docs.python.org/py3k/library/sys.html) 的可执行文件、前缀或 exec_prefix
  • 这些答案都不适合我。我如何加入root_dir="C:/Users/folder"filename="data/file1.txt" 以获得绝对路径?在非 Windows 中使用 os.path.join(root_dir, filename) 很容易,但我在 Windows 中找不到解决方案。

标签: python path operating-system cross-platform


【解决方案1】:

试试这个:

import os

def root_path():
    return os.path.abspath(os.sep)

在 Linux 上,这将返回 /

在 Windows 上,这将返回 C:\\ 或任何当前驱动器

【讨论】:

  • 这将为您提供您在 Windows 上运行脚本的驱动器的盘符;不是作为接受的答案提供的运行 python 可执行文件的驱动器号。可能是找到此页面的各种用户想要的,接受的答案提供了原始问题的要求。
  • 这在我的 Mac 上也运行良好
【解决方案2】:

您可以使用sys.executable 获取 Python 可执行文件的路径:

>>> import sys
>>> import os
>>> sys.executable
'/usr/bin/python'

然后,对于 Windows,驱动器号将是 splitdrive 的第一部分:

>>> os.path.splitdrive(sys.executable)
('', '/usr/bin/python')

【讨论】:

  • 如果os.path.splitdrive(sys.executable)[0] 也能在 linux 中以 root 身份返回 /,那就太好了。不过已经够好了,谢谢!
  • @Bentley4 我认为他们这样做是为了正确。 / 真的不是驱动器号
  • 是的,但我想也许在一个名为 root 的标准库模块中有一些 python 对象,它总是返回根目录。但好像没有。
  • 在执行类似任务时,我倾向于使用 file 来获取脚本的位置,而不是使用 sys.executable。
【解决方案3】:

这是你需要的:

import sys, os

def get_sys_exec_root_or_drive():
    path = sys.executable
    while os.path.split(path)[1]:
        path = os.path.split(path)[0]
    return path

【讨论】:

  • IMO,这个答案在其他答案的 cmets 中争论的点上有优点。不言而喻,这将返回哪个驱动器的根 - 它是 python 可执行文件的驱动器。如果有人需要不同的驱动器,他们应该以不同的path 开头。在没有这些知识的情况下,这个答案使用了优越的假设。
【解决方案4】:

使用pathlib(Python 3.4+):

import sys
from pathlib import Path

path = Path(sys.executable)
root_or_drive = path.root or path.drive

【讨论】:

  • 也许在最后一行使用三元运算符
  • 如果你能够使用pathlib >= 3.5,那么一个绝妙的方法是使用Path.home(),它依赖于操作系统并且可以用作与命令交互的root。
  • 在带有 pathlib2 的 Windows 上(Python 3.5+ pathlib 的 Python 2.7 backport),这并没有给出正确的答案,因为 root 属性返回 '\\',所以正确的答案似乎是path.drive + path.root as path.drive 在 Linux 上返回空的 ''
【解决方案5】:

根据 Eugene Yarmash 的回答,您可以在 Python >= 3.4 中使用 @987654321@ 中的 PurePath.anchor 属性,即:

驱动器和根目录的串联

使用sys.executable 获取python 安装的位置,一个完整的解决方案是:

import sys
from pathlib import Path

root = Path(sys.executable).anchor

这会在 POSIX(Linux、Mac OS)上产生'/',并且应该在 Windows 上为您提供'c:\\'(假设您的安装在c: 上)。您可以使用任何其他路径而不是 sys.executable 来获取此其他路径所在的驱动器和根目录。

【讨论】:

    【解决方案6】:

    这是一个跨平台、兼容 PY2/3 的函数,它返回给定路径的根。根据您的上下文,您可以将 python 可执行路径、脚本所在的路径或任何对您的用例有意义的路径输入其中。

    import os
    
    def rootpath( path ):     
        return os.path.splitdrive(os.path.abspath( path ))[0] + os.sep
        
    

    那么对于Python解释器的根路径:

    import sys
    
    PY_ROOT_PATH = rootpath( sys.executable )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-10
      • 1970-01-01
      • 1970-01-01
      • 2011-07-31
      • 1970-01-01
      • 1970-01-01
      • 2018-06-21
      • 1970-01-01
      相关资源
      最近更新 更多