【问题标题】:Managing paths in Python projects管理 Python 项目中的路径
【发布时间】:2020-04-10 11:26:49
【问题描述】:

有没有更有效的方法来处理 Python 中的硬编码路径?我发现自己处于以下情况,我将字符串附加到所需的目录中,但是如果我要移动文件,我不想无意中破坏代码。有没有办法在配置文件中标记这些目录路径,然后从该位置管理它们?如果有怎么办?

scripts_path = os.path.dirname(os.path.abspath(__file__)) + "/../scripts"

【问题讨论】:

  • 您应该使用os.path.join 来连接路径,而不是+。此外,如果脚本位置可以更改,则应将其作为参数传递,而不是硬编码。
  • 这能回答你的问题吗? How do I list all files of a directory?
  • pathlib,标准库的一部分,应该替换osPython 3's pathlib Module: Taming the File System
  • 我的问题更多是关于如何在使用 Python 时重构目录路径。在我以前的团队中,我们过去只保存在一个配置文件中,构建过程会在代码中对它们的引用进行去标记化,但所有这些都是很好的建议

标签: python


【解决方案1】:

将数据文件放在哪里是一个常见问题,不同的应用程序以不同的方式处理它。一些想法:

  • 标准化目录以读取相对于某个目录或其位置的所有文件 配置文件指定这个,然后把所有要读取的文件放在那里。这是 被 Apache 服务器、nginx、Vim 和许多其他程序使用。有 实际上a spec 告诉你在哪里 你应该把它。它没有被普遍遵循,但我喜欢它。

例如,要自定义 Vim 应用程序,请将配置放入 ~/.vimrc,以及其他 类 Unix 操作系统中~/.vim 中的配置(Windows 有相应的 地点)

  • 通过环境变量或命令行参数将配置传递给 应用程序。大多数旨在通过 Docker 运行的应用都使用这种方法。

例子:

myapp --script-dir=../scriptsmyapp --config conf.cfgAPP_NAME_DIR=/tmp myapp

  • 将数据烘焙到可部署文件中。对于 Python,您可以使用 MANIFEST.in 文件将其 pip 打包。这种方法由数据是只读的应用程序使用(这听起来像你的情况),并且它更容易部署。 Flask docs 对此有一些说明。

您可以结合使用其中一些方法。也许您希望您的应用程序首先在环境变量(如<app_name>_base_dir)中查找基本目录名称,如果不存在,则在~/.config/<app_name> 或其他内容中查找。我建议您查看一些您最喜欢的应用程序是如何解决这个问题的,以获得更多灵感。

一旦你从某个地方获得了 base_dir 路径,我强烈推荐使用 pathlib 库来操作路径。它带有较新版本的 Python,让您可以执行以下操作:

from pathlib import Path

base_dir = Path(__file__).parent  # consider approaches above to get base_dir
script_dir = base_dir / 'scripts'
print(script_dir)
# prints: <location of this file>/scripts

【讨论】:

  • 谢谢,这是我正在寻找的确切信息
猜你喜欢
  • 1970-01-01
  • 2010-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 2023-03-26
相关资源
最近更新 更多