python-安装包时如何处理文件位置和路径?

python-安装包时如何处理文件位置和路径?,python,installation,Python,Installation,我正在为客户端构建我的第一个Python包。最多,我设想用户从GitHub中提取代码,然后安装pip(pip install.)。此软件包将在Windows环境中使用。惯例是什么?在哪里最容易放置日志文件?有没有办法告诉setup.py用户可以轻松访问日志目录 举一个更具体的例子,假设我的代码库位于C:\Users\iamuser\projects\client\u project。Ipip安装。在client\u项目目录中。有一个logs\目录(C:\Users\iamuser\project

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

举一个更具体的例子,假设我的代码库位于
C:\Users\iamuser\projects\client\u project
。I
pip安装。
client\u项目
目录中。有一个
logs\
目录(
C:\Users\iamuser\projects\client\u project\logs
),我希望将日志文件放入其中。有没有办法让我的
setup.py
将日志文件放在该目录中?如果没有,我还应该尝试其他工具吗


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

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

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

默认情况下,有几个地方可以安全地存储它们。例如主目录或当前工作目录(或其子文件夹,请参见注释中的赞成和反对意见)。重要的是使用与脚本的
~
os.getcwd()
\uuuu文件
属性相关的相对路径。Linux系统通常有一些地方可以使用,例如
/tmp
/var/log
,但这在Windows上不起作用


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

将日志文件签入当前工作目录不是很好。不同的调用可能会使日志分散在整个文件系统中,可能当前的workdir甚至不能由用户写入。更好的方法是将它们放在用户的homedir下。或者,不要在默认情况下配置文件处理程序,让它成为“opt-in”。Home directory是一个不错的选择,我喜欢它(但也有一些边缘情况下不存在Home directory)。我也同意优先选择文件位置。你正确的当前工作目录可以到处都是,特别是如果手动设置的话,顺便说一句,我真的不喜欢。我使用相对于脚本的路径或绝对路径。重读帖子似乎用户希望日志文件与项目本身的设置结构一致,这在存储相对于生成日志的脚本的日志时很容易实现。我喜欢将它们放在当前工作目录中的一点是,用户会看到脚本实际上生成了它们,即使这不是一个好的生产解决方案(因此需要定制)。不确定将日志写入包文件夹是否是一种好做法。这不是一种好做法,在某些情况下甚至不可能。安装程序(可能是软件包管理器)可能有写入权限,但运行时应用程序将无法写入,并且可能会崩溃。这取决于各种外部因素,比如umask。你的重读是正确的。我也怀疑这是否是一个好的实践,但我仍然在努力遵循规范。我想我可以在安装时获取
日志
目录的绝对路径,因为我知道它与
setup.py
相关的位置。不幸的是,在安装过程中,
setup.py
被传输到一些
..\Temp\AppData
目录或其他目录中,因此
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu