3

我正在尝试制作一个小脚本来远程管理 Windows 计算机(目前只关闭)。我使用的方法涉及webapp2服务器。我想将我的第一次尝试编译成 .exe。我遇到的问题是,成功编译后我去运行它并返回错误:

Traceback (most recent call last):
 File "web2.py", line 2, in <module>
 File "webapp2.pyc", line 25, in <module>
 File "webob\__init__.pyc", line 1, in <module>
 File "webob\datetime_utils.pyc", line 10, in <module>
ImportError: No module named email.utils

我也用 cx_Freeze 试过这个,结果相似。我在使用 py2exe 捆绑时遵循了导入错误中给出的建议,但无济于事。

万一它有任何用处是我的代码:

import cgi
import webapp2
import os
import socket


def ip():
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.connect(('google.com', 0))
    return s.getsockname()[0]

class MainPage(webapp2.RequestHandler):
    def get(self):
        self.response.out.write("""
          <html>
            <body>
              <form action="/shutdown" method="link">
                <div><input type="submit" value="Shutdown"></div>
              </form>
            </body>
          </html>""")


class shutdown(webapp2.RequestHandler):
    def get(self):
        self.response.out.write('<html><body>Shutting down...<pre>')
        self.response.out.write('</pre></body></html>')
        os.system("shutdown -p -f")

app = webapp2.WSGIApplication([('/', MainPage),
                              ('/shutdown', shutdown)],
                              debug=True)
def main():
    from paste import httpserver
    httpserver.serve(app, host=ip(), port='80')

if __name__ == '__main__':
    main()

先感谢您。

编辑:

我发现使用 modulefinder 有很多模块没有被导入。但是,我不知道这是在正常运行时发生还是仅在导入时发生。

http://pastebin.com/s0U9WHJ6

4

2 回答 2

0

我发现问题在于我假设 py2exe 会像解释器一样导入 webob。事实上,我需要将 webob 文件夹放在我正在构建的文件夹中。

于 2012-07-04T22:24:10.870 回答
0

我不确定,但您可以尝试在 setup.py 中专门包含 email.utils,方法是在导入 py2exe 的脚本中的 setup 函数调用中添加以下参数:

options={"py2exe": {'includes': ["email.utils"]}}

那,或者您可以在导入 webapp2 之前尝试专门导入它,例如第 1 行:

import email.utils
import cgi
import webapp2

如果这表明它找不到不同的模块,请尝试将模块添加到包含列表中:

options={"py2exe": {'includes': ["email.utils", "othermodulename"]}}

或专门再次导入它。希望这可以帮助!:-)

于 2012-12-24T14:02:52.377 回答