2010-07-22 40 views

回答

1

你想写什么格式的文件?如果你想要的格式与导入的格式完全相同,那并不难 - 但基本上它是通过文件到文件的拷贝完成的。例如,如果有问题的模块称为blah,你可以这样做:

>>> import shutil 
>>> shutil.copy(blah.__file__, '/tmp/blahblah.pyc') 
+0

是否可以复制模块,如果该模块已被加载,但该模块的文件已被删除? – 2010-07-23 01:57:36

+0

不起作用? 'import itertools;打印itertools .__ file__'获取'AttributeError:'模块'对象没有属性'__file__' – 2010-07-23 02:19:53

+0

这只适用于作为文件存在的模块(源代码或字节代码);如果文件从来没有像这样存在(而只是作为机器码存在于动态库中,或者作为机器代码链接到Python的可执行文件中),或者在加载后被删除,则无法创建(或重新创建)基于内存内容“从头开始”。 – 2010-07-23 05:26:27

0

你的意思是这样的?

http://www.datamech.com/devan/trypython/trypython.py 

我不认为这是可能的,因为这是一个非常有限的环境。
__file__属性是伪造的,因此不会映射到一个真正的文件

+0

我正在运行我机器控制台上的repl。加载模块后,我删除了模块的目录。有没有办法去复制模块的内容,没有物理文件? – 2010-07-23 02:06:23

+0

@Bobby,不,无法以这种方式从删除错误中恢复。 – 2010-07-23 05:27:02

0

你可以通过获得一个关于你的模块对象得到一个开始:

modobject = __import__("modulename") 

不幸的是那些不与pickle。您可能可以遍历dir(modobject),并获得一些很好的信息来捕捉错误...或者是一个字符串表示dir(modobject)本身你想要什么?