我有一个名为fwp.py
的结构脚本,我运行时没有通过使用以下方式调用它:
if __name__ == '__main__':
# imports for standalone mode only
import sys
import fabric.main
fabric.main.main(fabfile_locations=[__file__])
然后必须通过调用fwp.py
来调用脚本。我想将其重命名为fwp
,以便将其称为fwp
。但这样做会导致
Fatal error: Couldn't find any fabfiles!
有没有办法让Python / Fabric导入这个文件,尽管缺少“.py”扩展名?
重申并澄清:
我没有使用“fab”实用程序(例如fab task task:parameter
);只需将我的脚本调用为fwp.py task task:parameter
,并希望能够将其称为fwp task task:parameter
。
更新
这不是this question的重复。问题不是“如何运行独立的结构脚本?”,而是“如何使用没有.py”的扩展脚本。
答案 0 :(得分:1)
编辑:原始答案已更正
fabric.main.main()
函数会自动将.py
添加到提供的fabfile位置的末尾(请参阅https://github.com/fabric/fabric/blob/master/fabric/main.py#L93)。不幸的是,该函数还使用Python的导入机制来加载文件,因此它必须看起来像模块或包。如果没有重新实现fabric.main
模块的大部分内容,我认为这是不可能的。您可以尝试对fabric.main.find_fabfiles
和fabric.main.load_fabfiles
进行猴子修补,以使其正常工作。
我可以在新安装的布料包装上保持不变。以下将使用文件名fwp
和版本1.10.1,Python2.7的可执行权限执行。我会尝试升级面料。
#!/usr/bin/env python
from fabric.api import *
import fabric.main
def do():
local('echo "Hello World"')
if __name__ == '__main__':
fabric.main.main(fabfile_locations=[__file__])
输出:
$ ./fwp do
Hello World
Done