2024-06-16 14:56:16 发布
网友
我有一个python模块,它在我的几个项目中共享(每个项目都有一个不同的工作目录)。此共享模块中的一个函数使用操作系统生成. 问题是,我不知道该给哪个路径名操作系统生成因为我不知道调用函数时当前的工作目录是什么。如何以任何调用方都能找到的方式引用该文件?谢谢!在
所以我刚刚了解了__file__变量,它将为我的问题提供解决方案。我可以使用文件来获得一个在所有项目中都是常量的路径名,并使用它来引用我需要调用的脚本,因为脚本始终位于相对于__file__的相同位置。不过,我愿意接受其他/更好的方法,如果有人有。在
__file__
下面的代码将找到调用模块的位置,从程序员的角度来看这是有意义的:
## some magic to allow paths relative to calling module if path.startswith('/'): self.path = path else: frame = sys._getframe(1) base = os.path.dirname(frame.f_globals['__file__']) self.path = os.path.join(base, path)
也就是说,如果您的项目位于/home/foo/project中,并且您希望在scripts/中引用脚本“myscript”,则只需传递“scripts/myscript”。代码片段会发现调用者位于/home/foo/project中,整个路径应该是/home/foo/projects/scripts/myscript。在
或者,您可以始终要求程序员指定完整路径,并使用os.path.exists如果它存在的话。在
把它放在一个众所周知的目录(/usr/lib/yourproject/或~/lib或类似的目录),或者根据使用它的源文件的位置将其放在一个已知的相对路径中。在
所以我刚刚了解了
__file__
变量,它将为我的问题提供解决方案。我可以使用文件来获得一个在所有项目中都是常量的路径名,并使用它来引用我需要调用的脚本,因为脚本始终位于相对于__file__
的相同位置。不过,我愿意接受其他/更好的方法,如果有人有。在下面的代码将找到调用模块的位置,从程序员的角度来看这是有意义的:
也就是说,如果您的项目位于/home/foo/project中,并且您希望在scripts/中引用脚本“myscript”,则只需传递“scripts/myscript”。代码片段会发现调用者位于/home/foo/project中,整个路径应该是/home/foo/projects/scripts/myscript。在
或者,您可以始终要求程序员指定完整路径,并使用os.path.exists如果它存在的话。在
把它放在一个众所周知的目录(/usr/lib/yourproject/或~/lib或类似的目录),或者根据使用它的源文件的位置将其放在一个已知的相对路径中。在
相关问题 更多 >
编程相关推荐