Импортные отношения стандартной библиотеки Python - PullRequest
0 голосов
/ 24 июня 2018

Я пишу приложение на C # с VisualStudio и использую IronPython для написания некоторых скриптов Python для моего приложения. Однако по умолчанию он не поддерживает всю стандартную библиотеку. Поэтому для импорта некоторых модулей (например, os) мне нужно указать мой код C # там, где на самом деле находится модуль os. Я также понимаю, что он по-прежнему будет ограничен библиотеками, реализованными на чистом Python.

В конечном итоге я хочу иметь что-то, что можно установить на другой машине. Мой текущий обходной путь состоит в том, чтобы включить копию https://github.com/python/cpython/tree/2.7/Lib в папку Debug, где исполняемый файл запущен, и кажется чрезмерным / ненужным включать всю вещь. Я попытался просто разместить нужные мне файлы (например, os.py) здесь, но, очевидно, он импортирует другие модули, которые импортируют другие модули и т. Д. Я должен был бы повторно выполнить код, чтобы получить ошибку, для которой модуль не мог не могу найти и добавить их 1 к 1, и это становится слишком утомительным.

Мне было интересно, есть ли какой-нибудь ресурс, который определяет отношения между стандартными библиотечными модулями и может точно сказать, какие файлы копировать. По сути, я ищу график импорта стандартной библиотеки. Поэтому, если я хочу import os в этих сценариях, я знаю, что скопировать os.py, ntpath.py, ...

Спасибо

1 Ответ

0 голосов
/ 24 июня 2018

вам, вероятно, не нужен импорт в виде дерева, а в виде простого списка, так что вы можете просто скопировать необходимые файлы.Вы можете получить это из sys.modules, после того как вы импортируете все, что нужно вашему скрипту - он будет содержать все модули, необходимые для импортированных вами скриптов, например:

import sys # even if you don't use it - it's a built-in module, won't add a file to the list, needed to get sys.modules
import os
import time
#import whatever-else

# this gives a list of tuples (module,file)
m=[(z,x.__file__) for z,x in sys.modules.items() if hasattr(x,"__file__") ]

for x in m:
   print x[0],x[1]
...