在我的应用程序中,我有一个安装python脚本(/root/ha/setup.py),它通过名为modules的目录查找,并在每个子目录中运行setup.py。
相关代码如下:
""" Exec the module's own setup file """
if os.path.isfile(os.path.join(root, module, "setup.py")):
execfile(os.path.join(root, module, "setup.py"))
问题是我希望/ orotot/ha/modules/modulename/setup.py无论在何处调用都能正常工作。
如果我在modules / modulename中并运行python setup.py它没关系,但如果我从上面的目录运行它/我会收到此错误
idFile = open(os.path.dirname(os.path.abspath(__file__)) + "/id.txt", "r").read()
IOError: [Errno 2] No such file or directory: '/root/ha/id.txt'
正如您所看到的那样,它正在获取调用它的脚本的路径而不是正在运行的脚本。应该尝试阅读/root/ha/modules/modulename/id.txt
我尝试过使用不同的方法来获取路径,但最终都出现了这个错误......
答案 0 :(得分:1)
execfile
不会修改全局变量(如__file__
),因此exectued脚本确实会采用不正确的路径。
您可以将全局变量传递给execfile
,以便修改其__file__
变量:
script = os.path.join(root, module, "setup.py")
if os.path.isfile(script):
g = globals().copy()
g['__file__'] = script
execfile(script, g)
答案 1 :(得分:0)
如果您需要访问某些软件包中的文件,请考虑使用此处记录的pkg_resources
:http://pythonhosted.org/setuptools/pkg_resources.html#basic-resource-access
获取作为名为package
的包的一部分存储的文件内容的示例位于此SO answer