编译一个 Python 项目 Windows

Compile a Python project Windows

我的 python 项目的目录结构如下:

eplusplus/
    |
    |
    ----__main__.py
    ----model/
    ----exception/
    ----controller/
    ----view/

目录:模型、异常、控制器和视图各有各的 __init__.py。当我 运行 我机器上的程序时,我总是使用以下命令:py -m eplusplus。但是当我尝试使用 py2exe 或 pytinstaller 时,指向:permission denied。对于我发现的,这是因为它是我尝试编译的目录,但是当我编译 __main__.py 时它编译正常,但是当我尝试执行它时说:Error! No eplusplus module founded!

我没有 setup.py 文件,我不知道它们是如何工作的。

经过一些非常深入的研究和错误尝试,我通过这样做成功了:

  • 我在 eplusplus 文件夹中添加了一个空的 __init__.py

  • eplusplus 文件夹之外,我不得不写一个 compilation.py 文件(该文件不一定必须有这个)来包含我正在使用的所有库(我将 post 这个答案末尾的文件)

  • 最后,在 PowerShell 中,我只需要输入 py compilation.py py2exe

感谢所有试图帮助我的人!

compilation.py 文件:

#To compile we need to run: python compilation.py py2exe
from distutils.core import setup
from glob import glob
import os
import py2exe
import pyDOE

VERSION=1.0

includes = [
    "sip",
    "PyQt5",
    "PyQt5.QtCore",
    "PyQt5.QtGui",
    "PyQt5.QtWidgets",
    "scipy.linalg.cython_blas",
    "scipy.linalg.cython_lapack",
    "pyDOE"
]

platforms = ["C:\Python34\Lib\site-packages\PyQt5\plugins" +
             "\platforms\qwindows.dll"]

dll = ["C:\windows\syswow64\MSVCP100.dll",
       "C:\windows\syswow64\MSVCR100.dll"]

media = ["C:\Users\GUSTAVO\EPlusPlus\media\title.png",
         "C:\Users\GUSTAVO\EPlusPlus\media\icon.png"]

documents = ["C:\Users\GUSTAVO\EPlusPlus\docs\"+
             "documentacaoEPlusPlus.pdf"]

examples = ["C:\Users\GUSTAVO\EPlusPlus\files\"+
            "\examples\baseline2A.idf",
            "C:\Users\GUSTAVO\EPlusPlus\files\"+
            "\examples\vectors.csv",
            "C:\Users\GUSTAVO\EPlusPlus\files\"+
            "\examples\BRA_SC_Florianopolis.838970_INMET.epw"]

datafiles = [("platforms", platforms),
         ("", dll),
         ("media", media),
         ("docs", documents),
         ("Examples", examples)]

imageformats = glob("C:\Python34\Lib\site-packages\PyQt5\"+
        "plugins\imageformats\*")

datafiles.append(("imageformats", imageformats))

setup(
    name="eplusplus",
    version=VERSION,
    packages=["eplusplus"],
    url="",
    license="",
    windows=[{"script": "eplusplus/__main__.py"}],
    scripts=[],
    data_files = datafiles,
    options={
        "py2exe": {
            "includes": includes,
        }
    }
)