Создать автономный исполняемый файл MoinMoin wiki
Я пытаюсь создать отдельную настольную версию MoinMoin wiki, чтобы я мог распространять ее на CDROM людям, у которых может быть установлен или не установлен Python. Я попробовал оба py2exe и bbfreeze без удачи. Они оба создают исполняемый файл, но когда он запускается, я получаю одинаковую ошибку от обоих:
C:\python_class\cdrom\bb-binary>wikiserver.exe
2011-08-22 15:06:21,312 WARNING MoinMoin.log:138 load_config for "C:\python_class\cdrom\bb-binary\wikiserverlogging.conf
" failed with "No section: 'formatters'".
2011-08-22 15:06:21,312 WARNING MoinMoin.log:139 using logging configuration read from built-in fallback in MoinMoin.log
module!
Traceback (most recent call last):
File "<string>", line 6, in <module>
File "__main__.py", line 128, in <module>
File "__main__wikiserver__.py", line 35, in <module>
File "MoinMoin/script/__init__.py", line 138, in run
File "MoinMoin/script/__init__.py", line 248, in mainloop
File "MoinMoin/wikiutil.py", line 1078, in importBuiltinPlugin
File "MoinMoin/wikiutil.py", line 1117, in builtinPlugins
File "MoinMoin/util/pysupport.py", line 81, in importName
ImportError: No module named server
Вот скрипт setup.py, который я использовал для py2exe:
from distutils.core import setup
import py2exe
includes = ["MoinMoin"]
excludes = []
packages = []
setup(options = {
"py2exe" : {
"includes" : includes,
"excludes" : excludes,
"packages" : packages,
"dist_dir" : "dist"
}
},
console=["wikiserver.py"])
А вот скрипт setup.py, который я использовал для bbfreeze:
from bbfreeze import Freezer
includes = ["MoinMoin.*"]
excludes = []
f = Freezer(distdir="bb-binary", includes=includes, excludes=excludes)
f.addScript("wikiserver.py")
f.use_compression = 0
f.include_py = True
f()
Если у кого-то есть помощь или предложения, я буду очень признателен!
Спасибо дуг
1 ответ
У py2exe есть ограничения в определении того, какие модули включать, особенно если они импортированы условно. Например,
import module
на собственной линии будет работать, однако,
if someCondition:
import module
не будет. Как это часто бывает со многими крупными фреймворками, MoinMoin импортирует только те модули, которые ему нужны, когда они им нужны. К сожалению, вам нужно будет сказать py2exe включить эти недостающие модули вручную, и это займет некоторое время методом проб и ошибок, пока вы не найдете все, что вам нужно.
Смотрите здесь о том, как включить модули вручную.