Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python绝对路径与_文件_,用于名为“不同方式”的模块_Python - Fatal编程技术网

Python绝对路径与_文件_,用于名为“不同方式”的模块

Python绝对路径与_文件_,用于名为“不同方式”的模块,python,Python,在我的应用程序中,我有一个setuppython脚本(/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")) 问题是我希望/

在我的应用程序中,我有一个setuppython脚本(/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"))
问题是我希望/root/ha/modules/modulename/setup.py无论从何处调用都能工作

如果我在modules/modulename中并运行python setup.py,这很好,但是如果我从modules/I上面的目录运行它,我会得到这个错误

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


我尝试使用不同的方法来获取路径,但都会出现此错误…

execfile
不会修改全局变量(如
\uuuuuuu file\uuuu
),因此执行的脚本确实会采用错误的路径

您可以将全局变量传递给
execfile
,以便修改其
\uuuuuuuuuuuuuuuuuuuuuuu
变量:

script = os.path.join(root, module, "setup.py")
if os.path.isfile(script):
    g = globals().copy()
    g['__file__'] = script
    execfile(script, g)

如果您需要从一些包中访问文件,则考虑使用<代码> PKGyReals文档如下:


获取作为名为
package
的包的一部分存储的文件内容的示例如下

谢谢。这太完美了:)@J.F.塞巴斯蒂安A“请”在这句话中不会出错。没必要rude@J.F.Sebastian问题似乎是关于任何random setup.py的,所以他无法控制获取文件所使用的任何方法path@J.F.Sebastian我想说的是,问题是关于“如何欺骗一个使用execfile的
\uu文件
”脚本”。