Python 脚本的绝对和相对导入

Python 脚本的绝对和相对导入,python,import,relative-import,Python,Import,Relative Import,我知道这个问题经常被问到,但我有一个关于进口的非常具体的问题。我的文件结构如下: main/main.py main/test_device.py main/lib/instructions.py main/device/android.py main/temp/example.py 基本上,这里发生的是我的程序(main.py)创建了几个较小的脚本(在temp/)然后尝试运行它们。但是,这些脚本都引用了lib/instructions.py和device/android.py。此代码运行以下

我知道这个问题经常被问到,但我有一个关于进口的非常具体的问题。我的文件结构如下:

main/main.py
main/test_device.py
main/lib/instructions.py
main/device/android.py
main/temp/example.py
基本上,这里发生的是我的程序(
main.py
)创建了几个较小的脚本(在
temp/
)然后尝试运行它们。但是,这些脚本都引用了
lib/instructions.py
device/android.py
。此代码运行以下文件:

name = "temp/test_" + str(program_name) + ".py"
input_file = open("test_device.py", "r")
contents = input_file.readlines()
input_file.close()
contents.insert(7, "program = [" + ", ".join(str(i) for i in instructions) + "]\r\n")
contents.insert(8, "count = " + str(program_name) + "\r\n")
contents = "".join(contents)
input_file = open(name, "w+")
input_file.write(contents)
Popen("python " + name)

我在每个目录中都有
\uuuuu init\uuuuuuu.py
文件,但是因为这些文件是脚本,所以我不能使用相对导入。如何导入这些库?

将模块复制到python/lib/site包可以解决这个问题

将模块复制到python/lib/site包可以解决这个问题

如果我理解您的意思,您需要在内容中构建脚本,以便能够从包中导入其他模块,但它不能要求正确的目标目录b/c这是一种笨拙的相对导入。在加入列表之前,请尝试添加此行

contents.insert(0, "import sys; sys.path.append('lib'); sys.path.append('device')")
这里已经很晚了&我正在打电话,所以可能有打字错误,但我希望这对你有用


编辑:根据当前工作目录的不同,您可能需要附加“../lib”或使用绝对路径

如果我理解您的意思,您需要在内容中构建脚本,以便能够从包中导入其他模块,但是它不能要求正确的目标目录b/c,这是一种尴尬的相对导入。在加入列表之前,请尝试添加此行

contents.insert(0, "import sys; sys.path.append('lib'); sys.path.append('device')")
这里已经很晚了&我正在打电话,所以可能有打字错误,但我希望这对你有用


编辑:根据当前工作目录,您可能需要附加“../lib”或使用绝对路径。

向我们展示您在
temp
dir中运行脚本所用的代码。@Sevanteri我上传了代码,向我们展示了您在
temp
dir中运行脚本所用的代码。@Sevanteri我上传了代码,我不太喜欢这样使用
sys
,但我想是这样的没办法。谢谢你的解决方案,不客气。是的,我猜它的命名方式听起来像是在进行系统范围的设置更改,但实际上更改只会影响您执行更改的名称空间&它不是持久性的。我不特别喜欢以这种方式使用
sys
,但我想这是没有帮助的。谢谢你的解决方案,不客气。是的,我猜它的命名方式听起来像是在进行系统范围的设置更改,但实际上更改只会影响您执行更改的名称空间&它不是持久的