在Python包/模块中,如何定义文件的相对路径?

2024-05-17 22:06:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个在Windows上运行的Python工具箱,它需要知道几个路径:

  • 文件夹,例如/path/to/output/path/to/calc//fixed/path/to/server
  • 程序,例如/path/to/program.exe

其中一些路径是固定的,可以硬编码。其中一些会根据用户的不同而变化。你知道吗

目前,我使用配置文件config.param解决了这个问题。此文件必须由每个用户创建。你知道吗

我选择这样一个配置文件的原因是,没有经验的用户可以简单地从其他人那里复制这个文件,并根据他们的系统更改内容。你知道吗

目录如下所示

Toolbox
 |
 +-- config.param
 |
 +-- package
 |    |
 |    +-- __init__.py
 |    |
 |    +-- path_and_names.py
 |
 +-- example
      |
      +-- example.py
      |
      + example_sub
         |
         +-- example_sub.py

对于所有路径变量的内部使用,我使用了一个名为PathAndNames的类。问题现在简化为:这个类PathAndNames需要知道文件config.param的位置。由于两者都是Python包的一部分,具有固定的相对路径,因此我通过

class PathAndNames:
    PATH_TO_CONFIG = os.path.normpath("../config.param")

问题:

由于这是一个工具箱,用户应该能够从/where/he/likes使用它,例如他的计算文件夹所在的位置。 他需要创建一个PathAndNames的实例,这样就应该知道所有正确的路径。你知道吗

问题是,../config.param现在引用的是/where/he/likes/../config.param,而不是工具箱中的正确路径。你知道吗


示例:

此时,用户被迫在工具箱的子文件夹中编写代码,例如子文件夹中的example.py。 如果该文件夹不在Toolbox的直接子文件夹中,例如像子文件夹Toolbox/example/example_sub中的example_sub.py,则工具箱将无法工作。在这个例子中,PathAndNames知道的../config.param的位置将是Toolbox/example/config.param。你知道吗


有没有办法在Python包/模块中定义相对路径?
有没有其他可能的方法来解决路径问题,让没有经验的用户能够理解他们应该做什么?你知道吗

任何想法都很感激。你知道吗


Tags: 文件topath用户py路径文件夹config
1条回答
网友
1楼 · 发布于 2024-05-17 22:06:55

^{}属性将获得调用它的模块的绝对文件路径(而不是加载它的文件的工作目录)。这允许您定义两个文件,例如config.paramconfig.py,然后在config.py中放置一行,如下所示:

import os
__here__ = os.path.join(*list(os.path.split(os.path.dirname(__file__)))[:-1])
PATH_TO_CONFIG = os.path.join(__here__, 'config.param')

从用户脚本中,可以得到如下文件路径

from my_module.config import PATH_TO_CONFIG

相关问题 更多 >