{"id":52,"date":"2009-04-08T14:33:53","date_gmt":"2009-04-08T06:33:53","guid":{"rendered":"http:\/\/tmp.xujiwei.com\/blog\/?p=52"},"modified":"2010-01-28T23:23:16","modified_gmt":"2010-01-28T15:23:16","slug":"setup-bespin-server-python-edition","status":"publish","type":"post","link":"https:\/\/xujiwei.com\/blog\/2009\/04\/setup-bespin-server-python-edition\/","title":{"rendered":"\u201c\u4e91\u7aef\u7684\u7f16\u8f91\u5668\u201d\uff0c10 \u6b65\u5b89\u88c5 Bespin Development Server\uff08Python\u7248\uff09"},"content":{"rendered":"<p>Mozilla\u00a0Labs\u00a0\u5728<a rel=\"external\" href=\"http:\/\/labs.mozilla.com\/2009\/02\/introducing-bespin\/\">\u4eca\u5e74\u60c5\u4eba\u8282\u90a3\u5929\u53d1\u5e03\u4e86\u4e00\u4e2a\u53eb\u00a0Bespin\u00a0\u7684\u7f16\u8f91\u5668<\/a>\uff0c\u8fd9\u662f\u4e00\u4e2a\u57fa\u4e8e\u7f51\u7edc\u7684\u53ef\u6269\u5c55\u6587\u672c\u7f16\u8f91\u5668\uff0c\u6309\u7167\u73b0\u5728\u6d41\u884c\u7684\u8bf4\u6cd5\uff0c\u5c31\u662f\u201c\u4e91\u7f16\u8f91\u201d\u4e86\u3002\u5e76\u4e14\uff0c\u8fd9\u4e2a\u7f16\u8f91\u5668\u662f\u5f00\u6e90\u7684\u3002<\/p>\n<p><a rel=\"external\" href=\"http:\/\/labs.mozilla.com\/uploads\/2009\/02\/webkit-editor-medium.png\"><img src=\"http:\/\/labs.mozilla.com\/uploads\/2009\/02\/webkit-editor-medium.png\" alt=\"\u56fe\u7247\u9644\u4ef6\" \/><\/a><\/p>\n<p>Bespin\u00a0\u662f\u57fa\u4e8e\u00a0Canvas\u00a0\u7684\uff0c\u56e0\u6b64\u76ee\u524d\u5b83\u53ea\u652f\u6301\u5c11\u6570\u6d4f\u89c8\u5668\uff0c\u5176\u4e2d\u5305\u62ec\u00a0Firefox\u00a03+\u3001Safari\u00a04\u00a0\u4ee5\u53ca\u00a0Chrome\u00a02\u00a0\u5f00\u53d1\u7248\uff0c\u56e0\u6b64\uff0c\u5982\u679c\u8981\u4f7f\u7528\u00a0Bespin\u00a0\u7684\u8bdd\uff0c\u4f60\u5fc5\u987b\u4f7f\u7528\u8fd9\u51e0\u6b3e\u6d4f\u89c8\u5668\u4e2d\u7684\u4e00\u79cd\u3002<\/p>\n<p>\u8981\u4f53\u9a8c\u00a0Bespin\uff0c\u53ef\u4ee5\u76f4\u63a5\u5728\u00a0<a rel=\"external\" href=\"http:\/\/bespin.mozilla.com\/\">bespin.mozilla.com<\/a> \u6ce8\u518c\u4e00\u4e2a\u5e10\u53f7\u5e76\u4e14\u767b\u5f55\uff0c\u4e0d\u8fc7\u76ee\u524d\u00a0bespin.mozilla.com\u00a0\u6240\u7528\u7684\u4ee3\u7801\u5e76\u4e0d\u662f\u6700\u65b0\u7248\u672c\u7684\uff0c\u7ebf\u4e0a\u4f7f\u7528\u7684\u4ee3\u7801\u6709\u8bb8\u591a\u4e0d\u5b8c\u5584\u4e4b\u5904\u3002\u56e0\u6b64\uff0c\u9664\u4e86\u4f7f\u7528\u00a0Mozilla\u00a0Labs\u00a0\u5b98\u65b9\u7684\u00a0Bespin\u00a0\u7ad9\u70b9\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u4ece\u00a0Mozilla\u00a0Labs\u00a0\u4e0b\u8f7d\u00a0Bespin\u00a0\u6e90\u4ee3\u7801\uff0c\u5e76\u5728\u672c\u5730\u642d\u5efa\u00a0Bespin\u00a0\u670d\u52a1\uff0c\u4ece\u800c\u53ef\u4ee5\u4f53\u9a8c\u00a0Mozilla\u00a0Labs\u00a0\u6700\u65b0\u7684\u5f00\u53d1\u6210\u679c\u3002<\/p>\n<p>\u6ce8\u610f\uff0c\u8fd9\u7bc7\u6587\u7ae0\u5e76\u4e0d\u4ecb\u7ecd\u600e\u4e48\u53bb\u4f7f\u7528\u00a0Bespin\uff0c\u800c\u662f\u4ecb\u7ecd\u600e\u4e48\u6837\u53bb\u914d\u7f6e\u4e00\u4e2a\u53ef\u4ee5\u5728\u672c\u5730\u8fd0\u884c\u7684\u00a0Bespin\u00a0\u670d\u52a1\u5668\uff0c\u56e0\u6b64\uff0c\u5982\u679c\u4f60\u9700\u8981\u4e86\u89e3\u600e\u4e48\u53bb\u4f7f\u7528\u8fd9\u4e2a\u7f16\u8f91\u5668\uff0c\u53ef\u4ee5\u53c2\u9605\u00a0<a rel=\"external\" href=\"https:\/\/wiki.mozilla.org\/Labs\/Bespin\">Mozilla\u00a0Labs\u00a0\u4e0a\u7684\u6587\u6863<\/a>\uff0c\u6216\u8005\u7b49\u6211\u518d\u5199\u4e00\u7bc7\u4f7f\u7528\u00a0Bespin\u00a0\u7684\u6587\u7ae0\uff1a\uff09<\/p>\n<p><strong>\u51c6\u5907\u5de5\u4f5c<\/strong><\/p>\n<p>\u9996\u5148\u9700\u8981\u8bf4\u660e\u7684\u662f\uff0c\u8fd9\u91cc\u4ecb\u7ecd\u7684\u914d\u7f6e\u00a0Bespin\u00a0\u672c\u5730\u670d\u52a1\u5668\u7684\u73af\u5883\u662f\u00a0Windows\u00a0Vista(or\u00a0WinXP)\u00a0+\u00a0Python\u3002\u53e6\u5916\uff0c\u5982\u679c\u662f\u5728\u00a0Vista\u00a0\u4e2d\u5b89\u88c5\u00a0Bespin\u00a0Server\uff0c\u4f60\u4f7f\u7528\u7ba1\u7406\u5458\u6743\u9650\u6765\u8fd0\u884c\u00a0cmd\u3002<\/p>\n<p>\u7b2c\u00a01\u00a0\u6b65\uff1a\u5728<a rel=\"external\" href=\"http:\/\/hg.mozilla.org\/labs\/bespin\/\">\u8fd9\u91cc<\/a>\u628a\u00a0Bespin\u00a0\u7684\u6e90\u4ee3\u7801\u4e0b\u8f7d\u4e0b\u6765\uff0c\u7136\u540e\u89e3\u538b\u5230\u4efb\u610f\u76ee\u5f55\uff0c\u6211\u8fd9\u91cc\u89e3\u538b\u5230\u7684\u662f\u201cD:\\Source\\Bespin\\bespin-8b89188c5066\u201d\u3002<\/p>\n<p>\u7b2c\u00a02\u00a0\u6b65\uff1a\u8fd9\u7bc7\u6587\u7ae0\u4ecb\u7ecd\u7684\u662f\u00a0Python\u00a0\u7248\u00a0Bespin\u00a0\u670d\u52a1\u5668\u7684\u914d\u7f6e\uff0c\u56e0\u6b64\u8fd8\u9700\u8981\u5b89\u88c5\u00a0Python\u00a0\u89e3\u91ca\u5668\uff0c\u53ef\u4ee5\u5728<a rel=\"external\" href=\"http:\/\/www.python.org\/download\/releases\/2.5.4\/\">\u8fd9\u91cc<\/a>\u4e0b\u8f7d\u5230\u00a0Python\u00a02.5.4\uff0c\u4f7f\u7528\u9ed8\u8ba4\u8bbe\u7f6e\u5b89\u88c5\u5373\u53ef\u3002<\/p>\n<p>\u7b2c\u00a03\u00a0\u6b65\uff1a\u5728\u00a0bespin\u00a0\u6e90\u4ee3\u7801\u76ee\u5f55\u4e2d\u65b0\u5efa\u4e00\u4e2a\u76ee\u5f55\u00a0Scripts\uff0c\u8fd9\u4e2a\u76ee\u5f55\u4e0e\u00a0backend\u00a0\u548c\u00a0frontend\u00a0\u4e24\u4e2a\u76ee\u5f55\u662f\u5e73\u7ea7\u7684\u3002\u7136\u540e\u5230\u00a0Python\u00a0\u7684\u5b89\u88c5\u76ee\u5f55\u4e0b\uff0c\u5c06\u5b89\u88c5\u76ee\u5f55\u4e0b\u7684\u00a0msvcr71.dll\u3001python.exe\u3001python25.dll\u3001pythonw.exe\u00a0\u56db\u4e2a\u6587\u4ef6\u62f7\u8d1d\u5230\u524d\u9762\u5efa\u7acb\u7684\u00a0Script\u00a0\u76ee\u5f55\u4e2d\u3002<\/p>\n<p>\u7b2c\u00a04\u00a0\u6b65\uff1a\u5c06\u00a0Python\u00a0\u5b89\u88c5\u76ee\u5f55\u4e2d\u7684\u00a0libs\u00a0\u76ee\u5f55\u62f7\u8d1d\u5230\u00a0bespin\u00a0\u6e90\u4ee3\u7801\u76ee\u5f55\u4e2d\u3002<\/p>\n<p>\u7b2c\u00a05\u00a0\u6b65\uff1aBespin\u00a0Python\u00a0\u670d\u52a1\u5668\u6240\u7528\u7684\u6709\u4e9b\u7ec4\u4ef6\u662f\u4f7f\u7528\u00a0C\u00a0\u5199\u7684\uff0c\u5728\u00a0Windows\u00a0\u4e0a\u8981\u7f16\u8bd1\u4e0e\u00a0Python\u00a0\u517c\u5bb9\u7684\u00a0C\u00a0\u6269\u5c55\uff0c\u9700\u8981\u4f7f\u7528\u00a0MinGW\uff0c\u4e0b\u8f7d\u4ee5\u4e0b\u8fd9\u4e9b\u538b\u7f29\u5305\uff0c\u89e3\u538b\u5230\u00a0D:\\Tools\\MinGW\uff0c\u8fd9\u91cc\u89e3\u538b\u7684\u4f4d\u7f6e\u53ef\u4ee5\u81ea\u5df1\u9009\uff0c\u4f46\u662f\u540e\u9762\u8981\u7528\u5230\uff0c\u6240\u4ee5\u8bf7\u8bb0\u4f4f\u4f60\u89e3\u538b\u7684\u8def\u5f84\uff1a<\/p>\n<blockquote><p>http:\/\/nchc.dl.sourceforge.net\/sourceforge\/mingw\/binutils-2.19.1-mingw32-bin.tar.gz<br \/>\nhttp:\/\/nchc.dl.sourceforge.net\/sourceforge\/mingw\/gcc-g++-3.4.5-20060117-3.tar.gz<br \/>\nhttp:\/\/nchc.dl.sourceforge.net\/sourceforge\/mingw\/gcc-core-3.4.5-20060117-3.tar.gz<br \/>\nhttp:\/\/nchc.dl.sourceforge.net\/sourceforge\/mingw\/w32api-3.13-mingw32-dev.tar.gz<br \/>\nhttp:\/\/nchc.dl.sourceforge.net\/sourceforge\/mingw\/mingwrt-3.15.2-mingw32-dev.tar.gz<\/p><\/blockquote>\n<p><!--more--><\/p>\n<p><strong>\u5f00\u59cb\u5b89\u88c5<\/strong><\/p>\n<p>\u7b2c 1 \u6b65\uff1a\u6253\u5f00 cmd\uff0c\u8fdb\u5165 bespin \u6e90\u4ee3\u7801\u76ee\u5f55\uff0c\u8fd0\u884c\uff1a<\/p>\n<p><em>bootstrap.py --no-site-packages<\/em><\/p>\n<p>\u8fd9\u4e2a\u547d\u4ee4\u4f1a\u4e0b\u8f7d\u5fc5\u987b\u7684\u6a21\u5757\u6e90\u4ee3\u7801\uff0c\u5e76\u4e14\u8fdb\u884c\u5b89\u88c5\u3002\u5728\u8fd0\u884c\u5230\u6700\u540e\u65f6\u4f1a\u62a5\u4e00\u4e2a\u9519\uff1a<\/p>\n<blockquote><p>IOError: [Errno 2] No such file or directory: '\/d:\\\\source\\\\bespin\\\\bespin-8b89188c5066\\\\ext\\\\paste-1.7.3dev-r7791.tar.gz'<\/p><\/blockquote>\n<p>\u8fd9\u65f6\u9700\u8981\u7528\u6587\u672c\u7f16\u8f91\u5668\u6253\u5f00 Bespin \u6e90\u4ee3\u7801\u76ee\u5f55\u4e2d\u7684\u201cLib\\site-packages\\pip-0.3.1-py25.egg\\pip.py\u201d\uff0c\u6ce8\u610f\uff0c\u8fd9\u91cc\u6240\u7528\u7684\u6587\u672c\u7f16\u8f91\u5668\u5fc5\u987b\u652f\u6301 UNIX \u6362\u884c\u6a21\u5f0f\uff0c\u4e5f\u5c31\u610f\u5473\u7740\u4e0d\u8981\u4f7f\u7528 Windows \u8bb0\u4e8b\u672c\u6765\u7f16\u8f91 pip.py\uff0c\u800c\u662f\u4f7f\u7528\u8bf8\u5982 EditPlus\u3001UltraEdit \u7b49\u7f16\u8f91\u5668\u6765\u7f16\u8f91\u3002<\/p>\n<p>\u6253\u5f00 pip.py \u540e\u4f7f\u7528\u641c\u7d22\u529f\u80fd\u5b9a\u4f4d\u5230 unpack_file \u65b9\u6cd5\uff0c\u641c\u7d22\u201cdef unpack_file\u201d\u5373\u53ef\u3002\u627e\u5230\u8fd9\u4e2a\u65b9\u6cd5\u540e\uff0c\u5728\u65b9\u6cd5\u5b9a\u4e49\u7684\u4e0b\u4e00\u884c\u6dfb\u52a0\u4e0b\u9762\u8fd9\u6837\u4e00\u53e5\u4ee3\u7801\uff1a<\/p>\n<pre lang=\"python\">filename = filename.lstrip('\/')<\/pre>\n<p>\u7b2c 2 \u6b65\uff1a\u518d\u5728 pip.py \u641c\u7d22\u201cRunning setup.py install for %s\u201d\u5b9a\u4f4d\u5230\u6a21\u5757\u5b89\u88c5\u4ee3\u7801\uff1a<\/p>\n<pre lang=\"python\">\r\n   try:\r\n            call_subprocess(\r\n                [sys.executable, '-c',\r\n                 \"import setuptools; __file__=%r; execfile(%r)\" % (self.setup_py, self.setup_py),\r\n                 'install', '--single-version-externally-managed', '--record', record_filename,\r\n                 '--install-headers', header_dir] + install_options,\r\n                cwd=self.source_dir, filter_stdout=self._filter_install, show_stdout=False)\r\n        finally:\r\n            logger.indent -= 2\r\n<\/pre>\n<p>\u5728 try \u7684\u540e\u9762\u6dfb\u52a0\u4e0b\u9762 CODE TO ADD START \u4e0e CODE TO ADD END \u4e4b\u95f4\u7684\u4ee3\u7801\uff0c\u7528\u6765\u8bbe\u7f6e\u9ed8\u8ba4\u7f16\u8bd1\u5668\u4e3a mingw32\uff1a<\/p>\n<pre lang=\"python\">\r\n     try:\r\n        ## CODE TO ADD START ##\r\n        call_subprocess(\r\n            [sys.executable, '-c',\r\n             \"import setuptools; __file__=%r; execfile(%r)\" % (self.setup_py, self.setup_py),\r\n             'setopt', '--command=build', '--option=compiler', '--set-value=mingw32'],\r\n            cwd=self.source_dir, filter_stdout=self._filter_install, show_stdout=False)\r\n        ## CODE TO ADD END ##\r\n            call_subprocess(\r\n                [sys.executable, '-c',\r\n                 \"import setuptools; __file__=%r; execfile(%r)\" % (self.setup_py, self.setup_py),\r\n                 'install', '--single-version-externally-managed', '--record', record_filename,\r\n                 '--install-headers', header_dir] + install_options,\r\n                cwd=self.source_dir, filter_stdout=self._filter_install, show_stdout=False)\r\n        finally:\r\n            logger.indent -= 2\r\n<\/pre>\n<p>\u5728\u4fee\u6539\u7684\u65f6\u5019\u6ce8\u610f\u7f29\u8fdb\uff0c\u56e0\u4e3a Python \u5c31\u9760\u7f29\u8fdb\u6765\u5224\u65ad\u4ee3\u7801\u7ed3\u6784\u4e86\u3002\u4fee\u6539\u5b8c\u6210\u540e\u4fdd\u5b58 pip.py\u3002<\/p>\n<p>\u7b2c 3 \u6b65\uff1a\u56de\u5230 cmd \u4e2d\uff0c\u5148\u8bbe\u7f6e\u4e00\u4e0b\u73af\u5883\u53d8\u91cf\uff0c\u5c06 MniGW \u7684\u8def\u5f84\u6dfb\u52a0\u5230 PATH \u73af\u5883\u53d8\u91cf\u4e2d\uff0c\u6ce8\u610f\uff0c\u8fd9\u91cc\u7684\u8def\u5f84\u8981\u4e0e\u4f60\u89e3\u538b MinGW \u65f6\u7684\u8def\u5f84\u4e00\u81f4\uff1a<\/p>\n<p><em>set path=D:\\Tools\\MinGW\\bin;%PATH%<\/em><\/p>\n<p>\u7136\u540e\u518d\u6b21\u8fd0\u884c\uff1a<\/p>\n<p><em>bootstrap.py --no-site-packages<\/em><\/p>\n<p>\u8fd9\u6b21\u5c31\u53ef\u4ee5\u6b63\u786e\u5b89\u88c5\u4e86\uff0c\u6700\u540e\u4f1a\u63d0\u793a\u5b89\u88c5\u5b8c\u6210\uff1a<\/p>\n<blockquote><p>Installed d:\\source\\bespin\\bespin-8b89188c5066\\backend\\python<br \/>\nProcessing dependencies for BespinServer==tip<br \/>\nFinished processing dependencies for BespinServer==tip<\/p><\/blockquote>\n<p>\u7b2c 4 \u6b65\uff1a\u5728 cmd \u4e2d\u8fd0\u884c Scripts\\activate.bat\uff0c\u8fd9\u4e2a\u547d\u4ee4\u4f1a\u8bbe\u7f6e\u5f53\u524d\u7684\u73af\u5883\u53d8\u91cf\u3002<\/p>\n<p>\u7b2c 5 \u6b65\uff1a\u5728 cmd \u4e2d\u8fd0\u884c<\/p>\n<p><em>paver dojo create_db<\/em><\/p>\n<p>\u8fd9\u4e2a\u547d\u4ee4\u4f1a\u5b89\u88c5 dojo \u5e93\uff0c\u7136\u540e\u8fd0\u884c\uff1a<\/p>\n<p><em>paver start<\/em><\/p>\n<p>cmd \u4e2d\u4f1a\u63d0\u793a\uff1a<\/p>\n<blockquote><p>---> pavement.start<br \/>\nserving on http:\/\/127.0.0.1:8080<\/p><\/blockquote>\n<p>\u606d\u559c\uff0cBespin Server \u5df2\u7ecf\u6210\u529f\u542f\u52a8\uff01<\/p>\n<p><strong>\u4f53\u9a8c Bespin<\/strong><\/p>\n<p>\u6253\u5f00\u6d4f\u89c8\u5668\uff0c\u5728\u5730\u5740\u680f\u4e2d\u8f93\u5165 http:\/\/localhost:8080\/ \u9a6c\u4e0a\u5f00\u59cb\u4f53\u9a8c Bespin\uff1a\uff09<\/p>\n<p>by Xu Jiwei<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Mozilla\u00a0Labs\u00a0\u5728\u4eca\u5e74\u60c5\u4eba\u8282\u90a3\u5929\u53d1\u5e03\u4e86\u4e00\u4e2a\u53eb\u00a0Bespin\u00a0\u7684\u7f16\u8f91\u5668\uff0c &hellip;<\/p>\n<p class=\"read-more\"><a href=\"https:\/\/xujiwei.com\/blog\/2009\/04\/setup-bespin-server-python-edition\/\">\u7ee7\u7eed\u9605\u8bfb &raquo;<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[11],"tags":[47,44,49,48],"_links":{"self":[{"href":"https:\/\/xujiwei.com\/blog\/wp-json\/wp\/v2\/posts\/52"}],"collection":[{"href":"https:\/\/xujiwei.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/xujiwei.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/xujiwei.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/xujiwei.com\/blog\/wp-json\/wp\/v2\/comments?post=52"}],"version-history":[{"count":0,"href":"https:\/\/xujiwei.com\/blog\/wp-json\/wp\/v2\/posts\/52\/revisions"}],"wp:attachment":[{"href":"https:\/\/xujiwei.com\/blog\/wp-json\/wp\/v2\/media?parent=52"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/xujiwei.com\/blog\/wp-json\/wp\/v2\/categories?post=52"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/xujiwei.com\/blog\/wp-json\/wp\/v2\/tags?post=52"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}