作为Python的初学者,我应该如何处理安装目录?

作为Python的初学者,我应该如何处理安装目录?,python,directory,installation,Python,Directory,Installation,我是一个自学成才的业余纯粹娱乐程序员。我不懂所有花哨的编程术语,我当然没有任何好的资源,除了这个网站,我可以去那里寻求帮助。(也就是说,请给我闭嘴!)我想我的问题在这里是很常见的,但我真的在谷歌或这个网站上找不到任何答案,可能是因为我不知道合适的搜索术语 ~~~ 话虽如此,我觉得自己对Python的基础知识掌握得相当扎实。现在,我创建了一个应用程序,我想与朋友分享。我的应用程序使用我写入代码本身的目录路径访问我计算机上的JPEG图像文件。但是,我希望我的朋友能够将这些图像文件存储在他们计算机上的

我是一个自学成才的业余纯粹娱乐程序员。我不懂所有花哨的编程术语,我当然没有任何好的资源,除了这个网站,我可以去那里寻求帮助。(也就是说,请给我闭嘴!)我想我的问题在这里是很常见的,但我真的在谷歌或这个网站上找不到任何答案,可能是因为我不知道合适的搜索术语

~~~

话虽如此,我觉得自己对Python的基础知识掌握得相当扎实。现在,我创建了一个应用程序,我想与朋友分享。我的应用程序使用我写入代码本身的目录路径访问我计算机上的JPEG图像文件。但是,我希望我的朋友能够将这些图像文件存储在他们计算机上的任何位置,而不必存储在我一直使用的文件夹中

我认为实现这一点的最佳方法是允许我的朋友为自己选择目录路径,然后将他们选择的目录路径写入他们计算机上预定位置的文件。然后,我的应用程序将把该文件的位置预先写入其代码中。这样,在预先确定的位置打开文件就非常容易了,然后该文件将把我的应用程序指向我朋友选择的目录路径

1.)我的直觉是否被误导了?有更好的方法吗?

2.)如果您认为我的一般方法是合理的,那么计算机上是否有一个好的/通用的位置,应用程序通常在安装时存储其目录路径?

任何建议-或任何推荐的资源-将不胜感激!谢谢

这样做的标准方法要复杂得多,而且是特定于平台的:

在传统的Unix上,这非常简单;您以某种更简单的格式创建一个文本文件(例如,名为,比如,
~/.myprogram.cfg
),并在其中写入一行类似于
image\u path=/path/to/images

在大多数现代Linux系统或任何其他基于FreeDesktop/XDG的系统上,您应该(至少对于GUI应用程序)使用在环境中查找为的特殊目录,返回到
~/.config
,而不是使用
~

在Windows上,存储此类内容的标准位置是Windows注册表(例如,通过使用),方法是为程序创建一个键,并在其中存储一个名为
image\u path
和value
/path/to/images
的值

在Mac电脑上,存储此类内容的标准位置是
NSUserDefaults
数据库(例如,通过使用,它不是stdlib的一部分,但内置于苹果的预装Python中)通过打开程序的默认域,并使用key
image\u path
和value添加一个值……那么,您可能想要一个Cocoa书签(甚至可能是一个安全范围的书签),而不是路径

这听起来可能太复杂了

一种选择是使用一个库来为您包装这些内容。如果您已经在使用一个重载框架,比如说Qt,它可能内置了这样做的功能。否则,可能需要大量搜索才能找到一些内容

一个更简单的选择是假装一切都像传统的Unix。这将在Windows和Mac上运行。在某些Windows版本中,配置文件将在其主目录中可见,但这并不是什么大问题,这将有点令人恼火。这意味着您将得不到Mac提供的一些额外功能,例如能够使用魔法如果用户将目录移动到硬盘上的其他位置,请按照该目录进行操作;如果用户重新安装OS X并迁移其旧设置,请记住这些设置,但通常也可以


在两个极端之间,你可以假装一切都像Linux一样,在Windows和Mac上使用一个特殊的、不引人注目的文件位置。这两个平台都有API来查找特殊的目录,在Windows上称为“应用程序数据”和“应用程序支持”在Mac上,分别使用PyWin32或PyObjC,可以很容易地查找它们(例如,请参阅)然后你只需在Windows上创建一个子目录,名为
My App
,或者在Mac上创建一个子目录
com.mydomain.myapp
,并将文件存储在那里。

这是绝对正确的。坏消息是,它是特定于操作系统的,你需要了解这三个目录在该级别上的工作方式才能正确执行。好的,但我可以去哪里学习如何做到这一点t?第一步是什么?有什么文章/资源可以让我开始吗?谢谢,谢谢,谢谢,谢谢!你太棒了!完全回答了我的问题。这正是我想要的!@MikeS:你需要其他信息吗,比如在哪里找到MSDN和Apple文档,如何命名你的注册表项/pref要调用的域或哪些函数,或者这就足够开始了吗?@abarnert:你是说为了让注册表项正常工作,我应该用一种特殊的方式命名注册表项吗?例如,如果我想在Windows上这样做,我能不能只创建一个与我的应用程序关联的注册表,然后在运行时创建任何键e fit?或者我有什么特别的方法来实现它吗?我想我可以自己找到模块和函数,但我很感谢您的帮助:)@MikeS.:在
image\u路径
部分,您可以调用任何您想要的东西。我通常尝试在不同平台上为注册表项/prefs/config项使用相同的名称,但您甚至不必这样做,您可以在一个平台上加载
ImagePath
,在另一个平台上加载
Image Path
,在另一个平台上加载
Image\u Path
。@MikeS.:顶级键有准标准;我相信目前的版本仍然推荐
HKCU\Software\My Identity\My Pr