Абсолютный и относительный импорт для скриптов
Я знаю, что этот вопрос часто задавался, но у меня есть очень специфическая проблема, связанная с импортом. У меня есть структура файла следующим образом:
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)
я имею __init__.py
файлы в каждом каталоге, но поскольку эти файлы являются скриптами, я не могу использовать относительный импорт. Как мне импортировать эти библиотеки?
2 ответа
Если я вас понимаю, вам нужен сценарий, который вы встраиваете в содержимое, чтобы иметь возможность импортировать другие модули из вашего пакета, но он не может запросить правильный целевой каталог, потому что это своего рода неуклюжий относительный импорт над собой. попробуйте добавить эту строку, прежде чем присоединиться к списку вместе
contents.insert(0, "import sys; sys.path.append('lib'); sys.path.append('device')")
здесь уже поздно, и я разговариваю по телефону, так что может быть опечатка, но я надеюсь, что это сработает для вас.
изменить: в зависимости от текущего рабочего каталога, вам может потребоваться добавить '../lib' или использовать абсолютный путь
Копирование ваших модулей в python/lib/site-packages решит проблему.