我正在使用Visual Studio用C#编写应用程序,并使用IronPython为我的应用程序编写一些Python脚本。但是,默认情况下它没有完整的标准库支持。因此,要导入某些模块(例如os
),我需要将C#代码指向os模块实际所在的位置。我也了解它仍将限于纯python实现的库。
最终,我希望可以在其他计算机上安装某些东西。我当前的解决方法是在运行可执行文件的Debug文件夹中包含https://github.com/python/cpython/tree/2.7/Lib的副本,并且似乎必须包含整个内容,这是多余的/不必要的。我尝试仅将我需要的文件(例如os.py
)放在此处,但显然它导入了其他模块,又导入了其他模块,等等...我将不得不重新运行代码以获取有关哪个模块的错误它找不到并一一添加它们,太麻烦了。
我想知道是否有某种资源可以指定标准库模块之间的关系,并且可以准确地告诉我要复制哪些文件。本质上,我正在寻找的是标准库导入图。因此,如果我想在这些脚本中import os
,我知道要复制os.py,ntpath.py,...
谢谢
答案 0 :(得分:0)
您可能不需要将导入作为树,而是作为一个简单的列表,因此您只需复制所需的文件即可。导入脚本所需的所有内容后,您可以从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]