我正在开发一个在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包/模块中定义相对路径?
有没有其他可能的方法来解决路径问题,让没有经验的用户能够理解他们应该做什么?你知道吗
任何想法都很感激。你知道吗
^{} 属性将获得调用它的模块的绝对文件路径(而不是加载它的文件的工作目录)。这允许您定义两个文件,例如
config.param
和config.py
,然后在config.py
中放置一行,如下所示:从用户脚本中,可以得到如下文件路径
相关问题 更多 >
编程相关推荐