简体   繁体   中英

Compiling python project with Cx-Freeze

I'm trying to make and executable from a project I'm working on, to test it on a different computer, without requiring python installed.

I want to use cx freeze to build and exe file, and this is my project tree:

- Project
   - objects
         blocks.py
         enemy.py
         item.py
         player.py
         __init__.py
   - scripts
         camera.py
         chunk_manager.py
         __init__.py
   - textures
       - items
       - player
       - terrain
       - UI
       - void
         index.py
         __init__.py
     main.py
     settings.py
     setup.py
     map.json

As you can probably tell, this is a game.

Anyways, what I have done is executing just cxfreeze main.py --target-dir=./ dist and it generated a build directory with a lot of stuff in it. It generated a linux executable, but thats fine, I want to test if I can make it python-independent first, and I'll solve the.exe part later.

So, I executed the file, and nothing happened. Then I tried running from the terminal and it said that it was missing the camera.py file. I went into the generated directory and I found out that cxfreeze had not copied that file. I tried moving in in there myself, but it did not work.

I started checking for other files, and I found out that only the textures had been copied. I thought this was just because of the one line command I used, so I am now trying to make a setup.py file (as you can see in the file tree) but I am lost in how to import my custom packages (objects, scripts, and textures) and the files in the same directory as main.py

This is how my setup.py file looks like:

import sys
from cx_Freeze import setup, Executable


options = {
    'build_exe': {
        'includes': ['camera', 'chunk_manager'], 'path': sys.path + ['scripts']
    }
}

setup(
    name = "Void Boats",
    version = "alpha0.1",
    options = options,
    executables = [Executable("main.py")])

I am not sure how would I put all the packages in the 'include' section, and I can't find anything on the internet that uses more than a simple file like helloworld.py, and the samples of cxfreeze on their github only show how to import files from one directory. Do I have to move everything into one single package and put all the files in the same 'include'? Or can I have one include for each package I have? Any help would be pretty much appreciated.

Edit: I'm running on ParrotSec 4.9 (Debian based)

Use "python -m setup.py build" on cmd, that will build exe.

Example setup with extra folders:

from cx_Freeze import setup, Executable
import sys

version = "0.0.6"

build_options = {
    "packages": [],
    "excludes": [],
    "build_exe": "X:\\builds\\",
    "include_files": ["Sequence_Sample/", "icons/"],
}

base = "Win32GUI" if sys.platform == "win32" else None

executables = [Executable("MainUIController.py", base=base, targetName="pym")]

setup(
    name="Python Image Macro Project",
    version=version,
    description="Image Based macro project.",
    options={"build_exe": build_options},
    executables=executables,
)

Python 3.8 and later has problem with cx_freeze 6.1 - not copying python dll. cx_freeze 6.2 is strongly recommended if that's the case.

You'll have to clone cx_freeze and build it, then install it to use 6.2.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM