【问题标题】:python - How to handle file locations and paths when installing package?python - 安装包时如何处理文件位置和路径?
【发布时间】:2019-04-09 20:40:14
【问题描述】:

我正在构建我的第一个 Python 包以供客户使用。最多,我设想用户从 GitHub 中提取代码,然后 pip 安装 (pip install .)。此软件包将在 Windows 环境中使用。什么是约定或者最容易放置日志文件的地方是什么?有没有办法告诉setup.py 创建一个用户可以轻松访问的日志目录?

举个更具体的例子,假设我在本地有代码库C:\Users\iamuser\projects\client_project。我在client_project 目录中时pip install .。有一个 logs\ 目录 (C:\Users\iamuser\projects\client_project\logs) 我希望将日志文件放入其中。有没有办法让我的setup.py 将日志文件放在该目录中?如果没有,我应该尝试其他工具吗?

我尝试过类似this 的方法,但是在运行安装程序时获取的任何路径都不是原始setup.py 文件所在的位置(例如:os.path.abspath(__file__) 显示了client_project 目录之外的其他位置)。

【问题讨论】:

  • 您需要创建函数来处理此任务,请参阅alan的解决方案

标签: python installation


【解决方案1】:

在创建 Python 包时,我不会对用户的文件系统或其中的权限做出任何假设(理想情况下甚至不考虑操作系统)。如果你的 Python 包创建了日志文件,你可以使用 Python 的内置日志系统,日志信息会去任何用户想要去的地方(默认为 stdout 和 stderr)。

如果您的包生成文件,用户应该可以选择使用设置或配置文件或环境变量来决定它们的去向。

默认情况下,您可以在一些地方安全地存储它们。例如主目录或当前工作目录(或它们的子文件夹,请参阅 cmets 中的优缺点)。重要的是使用与~、os.getcwd() 或脚本的__file__ 属性相关的相对路径。 Linux 系统有一些通常存在并且可以使用的位置,例如 /tmp 或 /var/log,但在 Windows 上不起作用。

有时,我将输出文件存储在当前工作目录的父目录中,以免将输出文件签入 Git 存储库,但这取决于其他假设。

【讨论】:

  • 将日志文件放入当前工作目录不是很好。不同的调用可能会使日志分散在整个文件系统中,并且用户甚至可能无法写入当前的工作目录。更好的是将它们放在用户的 homedir 下的某个地方。或者,只是不默认配置文件处理程序,将其设为“选择加入”。
  • 主目录很好,我喜欢它(但也有一些极端情况,主目录不存在)。我也同意应该首选选择文件位置。您正确的当前工作目录可能到处都是,特别是如果我手动设置的话。真的不喜欢。我使用相对于我的脚本的路径或绝对路径。
  • 重新阅读帖子似乎用户希望拥有具有项目本身设置结构的日志文件,这可以在存储与生成它们的脚本相关的日志时轻松实现。我喜欢将它们放入当前工作目录的一件事是用户会看到脚本实际上生成了它们,即使它不是一个好的生产解决方案(因此是定制的)。不确定将日志写入包文件夹是否是一种好习惯。
  • 不是很好的做法,在某些情况下甚至是不可能的。安装程序(可能是包管理器)可能有权在此处写入,但运行时的应用程序将无法并且可能崩溃。并且取决于各种外部因素,例如 umask。
  • 您的重读是正确的。我也怀疑这是否是一种好的做法,但我仍然试图遵循规范。我想我可以在安装时获取到logs 目录的绝对路径,因为我知道它与setup.py 的关系。不幸的是,在安装过程中,setup.py 被传输到某个...\Temp\AppData 目录或其他东西中,因此__file__ 提供了一个无用的文件路径,或者至少是一个普通用户不容易找到的文件路径。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-21
  • 2012-05-14
  • 1970-01-01
  • 2018-09-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多