我有一个奇怪的要求。我无法在机器上(在工作场所)安装(或编译)python-fabric模块。我想知道是否有可能将整个结构的源代码复制为单个文件并粘贴到我的文件中(类似“sqlite amalgamation”)?这有用吗?
- >获取结构模块的来源。 - >将此模块的所有文件内容复制到文件(singlefile.py) - >现在在myfile.py上导入这个singlefile.py
有什么想法? (让我们假设,像工作场所一样,paramiko,pycrypto之类的依赖关系。)
答案 0 :(得分:1)
如果库有任何C扩展名,那么肯定无法做到这一点。
如果没有,那么技术上是可能的,但实际上并非如此。
您几乎肯定想要做的是使用virtualenv
,或者,如果您不能这样做,则使用用户站点包而不是系统站点包,或者其他一些方法来绕过“无法安装”问题,只需安装即可。
但如果你对技术部分感兴趣......
如果Fabric是一个.py
文件,那就很容易了。但是看the source,它有很多文件。它们是按层次结构组织的,而不仅仅是一个平面目录。并且有一个非平凡的setup.py
,这通常意味着它最终安装的方式与源树中的方式不同。
所以,要做到这一点,你需要做的是:
compiles
该字符串,exec
在一个新的全局字典中,用types.ModuleType
构建一个dict
对象,然后将其插入sys.modules
1}}词典;然后调用该函数。这里唯一真正棘手的,而不是乏味的,是:
import spam
在转向模块加载器之前始终会查找sys.modules['spam']
,因此如果您预先填充,import
将接受它从理论上讲,这应该有效。或者接近它的东西;我可能错过了一个细节。在实践中,我真诚地怀疑你想要这样做。