Python 3.6 yazılmış kodu exe yapma hakkında bir soru

Merhaba python 3.6.2 kullanıyorum küçük bir bot yazılımını selenium ve pyqt5 kullanarak yazdım şu an için nasıl exe haline getireceğimi bilmiyorum internetten biraz araştırarak cx_freeze ile yapabilceğimi öğrendim ama aklımda bir soru var bu kullandığım libraryler programı exe haline getirdiğimde başka birinin bilgisayarında çalışacak mı yoksa çalışması için bir şeyler yapmamız gerekiyor mu ?

Eğer kütüphaneleri tek bir exe içine eklerseniz o zaman herhangi başka bir kurulum yapmanız gerekmez. Bunun en kolay yolu, kütüphanelerin kurulumlarını exe içinde bulundurmak ve ayrı ayrı çalıştırarak kurulumları tamamlamak.

Teşekkürler, bunu nasıl yapabilirim peki yardımcı olur musunuz?

Aşağıdaki adımları cx_freeze modülünü pip ile bilgisayarınıza yükledikten sonra izleyebilirsiniz.

1. Öncelikle bir setup.py dosyası oluşturun, bu dosyanın içine ilgili yerleri değiştirerek aşağıdaki kodları yazın:

# -*- coding: utf-8 -*-

import sys
from cx_Freeze import setup, Executable

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

setup(
    name = "isim",
    version = "0.1",
    description = "açıklama",
    executables = [Executable("dosya.py", base=base)]
    )

2. dosya.py ve setup.py dosyalarını Python’ın kurulu olduğu dizine kopyalayın.

3. Python’ın kurulu olduğu dizinde komut arayüzünü açın ve komut arayüzüne aşağıdaki komutları yazın:

python setup.py build

4. Eğer hatayla karşılaşmazsanız Python’ın kurulu olduğu dizinde “build” isimli bir klasörün oluşması gerekir, exe dosyanızı bu klasörün içinde bulabilirsiniz.

Not 1: Bazı durumlarda; örneğin tkinter ile bir GUI exe oluşturmak istediğinizde veya dosyanızda bir modül kullandığınızda veya dışarıdan bir dosyayı programınızda kullanmak istediğinizde, yukarıdaki adımları takip etmek istenilen sonucu vermiyor. Yukarıdaki yöntemi
herhangi bir modülü import etmeden denediğimde herhangi bir sorunla karşılaşmadım.

Not 2: Şayet yukarıdaki adımlar dosyanızın içine import edilmiş modüller yüzünden istenilen sonucu vermezse, aşağıdaki yöntemi denemeye çalışın:

setup.py dosyası içine 1. adımda verilen kodları değil de ilgili yerlerde gerekli değişikliği yapmak üzere aşağıdaki kodları yazın:

# -*- coding: utf-8 -*-

import os
import sys
from cx_Freeze import setup, Executable

# Bu kısım tkinter ile ilgili olduğu için sizin kullanmanıza gerek yok.
os.environ['TCL_LIBRARY'] = r'C:\Program Files\Python35\tcl\tcl8.6'
os.environ['TK_LIBRARY'] = r'C:\Program Files\Python35\tcl\tk8.6'

# Bu kısım modülleri seçeneklere dahil etmek için. Bu kısmı şayet bir modül dosyamızın içine aktarılmışsa veya dışarıdan bir dosyayı çalıştırmak istediğimizde kullanmalıyız.
buildOptions = dict(
    packages = [],
    excludes = [],
    include_files = [r'C:\Program Files\Python35\DLLs\tcl86t.dll',
                     r'C:\Program Files\Python35\DLLs\tk86t.dll']
# include_files isimli listenin içine dışarıdan programınıza aktarmak istediğiniz dosyaları ekliyorsunuz.
    )

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

setup(
    name = "isim",
    version = "0.1",
    description = "açıklama",
    options = dict(build_exe = buildOptions),
    executables = [Executable("dosya.py", base=base)])

setup.py dosyasını yukarıdaki gibi ayarladıktan sonra 2. ve 3. adımdaki işlemleri yapmanız gerekiyor.

Yukarıdaki kodlar umarım kafanızı karıştırmaz. Şayet dosyamıza bir modül import
edilmiş ise kodlar aşağı yukarı örnekteki gibi değişecektir.

Ayrıca şayet İngilizceniz varsa cx_Freeze Belgelendirmesi’ni okumanızı tavsiye ederim.

Umarım yardımcı olabilmişimdir.

1 Beğeni

Öncelikle teşekkür ederim ilgilendiğiniz için dediklerini yaptım test etmek için basit bir python programı yazıp denedim gayet güzel çalıştı fakat sonra kendi programımı build ettiğimde error
böyle bir hatayla karşılaştım selenium dan kaynaklandığını düşünüyorum.

Traceback hatasını daha önce ben de almıştım.

Kendi programınızı build ederken ilk kodları mı yazdınız yoksa ikincisini mi?

Mesela birkaç tane modül kullanmanız gerektiğinde kodları şu şekilde de yazabilirsiniz:

# -*- coding: utf-8 -*-

from cx_Freeze import setup, Executable
import sys

build_exe_options = {"packages": ["tkinter", "sqlite3"]}

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

setup(
    name = "isim",
    version = "0.1",
    description = "açıklama",
    options = {"build_exe": build_exe_options},
    executables = [Executable("dosya.py", base=base)])

Yardımlarınız için teşekkürler aşağıdaki kod ile build ederek sorunu çözdüm.

import sys
from cx_Freeze import setup, Executable

build_exe_options = {}

base = ‘Console’

setup( name = “web_scraper”,
version = “0.1”,
description = “desc”,
options = {“build_exe”: build_exe_options},
executables = [Executable(“main.py”, base=base)])

Rica ederim, kolay gelsin.

1 Beğeni

PyInstaller kullanmanızı tavsiye ederim, “–onefile” parametresi işinizi görecektir.

blackvkng’in dediği gibi PyInstaller da kullanabilirsiniz; kullanımı cx_Freeze modülüne göre daha kolay ve daha çabuk sürede scriptinizi exeye çevirebilir. Ancak bir değişiklik yapılmadıysa PyInstaller’ı kullanabilmek için Python 3.6’dan önceki Python sürümlerini kullanmanız gerekiyor.

Wxpython modülünü kullanarak bir .exe yapmak istiyorum ama aşşağıdaki hatayı verdi. Program ilk yaptığım da .exe oldu ama dosyaları almağı için aşşağıdaki kodları ekledim.

setup.py


# -*- coding: utf-8 -*-

import os
import sys
from cx_Freeze import setup, Executable
build_exe_options = {"packages": ["tkinter", "sqlite3"]}
buildOptions = dict(
    packages = [],
    excludes = [],
    include_files = [r'C:\Program Files\Python35\DLLs\tcl86t.dll',
                     r'C:\Program Files\Python35\DLLs\tk86t.dll']

    )

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

setup(
    name = "isim",
    version = "0.1",
    description = "açıklama",
    options = dict(build_exe = buildOptions),

HATA;


C:\Users\casper\Desktop\asd>python setup.py build
running build
running build_exe
Traceback (most recent call last):
  File "setup.py", line 24, in <module>
    executables = [Executable("dosya.py", base=base)])
  File "C:\Users\casper\AppData\Local\Programs\Python\Python36\lib\site-packages\cx_Freeze\dist.py", line 349, in setup
    distutils.core.setup(**attrs)
  File "C:\Users\casper\AppData\Local\Programs\Python\Python36\lib\distutils\core.py", line 148, in setup
    dist.run_commands()
  File "C:\Users\casper\AppData\Local\Programs\Python\Python36\lib\distutils\dist.py", line 955, in run_commands
    self.run_command(cmd)
  File "C:\Users\casper\AppData\Local\Programs\Python\Python36\lib\distutils\dist.py", line 974, in run_command
    cmd_obj.run()
  File "C:\Users\casper\AppData\Local\Programs\Python\Python36\lib\distutils\command\build.py", line 135, in run
    self.run_command(cmd_name)
  File "C:\Users\casper\AppData\Local\Programs\Python\Python36\lib\distutils\cmd.py", line 313, in run_command
    self.distribution.run_command(command)
  File "C:\Users\casper\AppData\Local\Programs\Python\Python36\lib\distutils\dist.py", line 974, in run_command
    cmd_obj.run()
  File "C:\Users\casper\AppData\Local\Programs\Python\Python36\lib\site-packages\cx_Freeze\dist.py", line 218, in run
    zipExcludePackages = self.zip_exclude_packages)
  File "C:\Users\casper\AppData\Local\Programs\Python\Python36\lib\site-packages\cx_Freeze\freezer.py", line 150, in __init__
    self._VerifyConfiguration()
  File "C:\Users\casper\AppData\Local\Programs\Python\Python36\lib\site-packages\cx_Freeze\freezer.py", line 470, in _VerifyConfiguration
    sourceFileName)
cx_Freeze.freezer.ConfigError: cannot find file/directory named C:\Program Files\Python35\DLLs\tcl86t.dll

tcl86.dll dosyanız o dizinde değil. Oradaki tcl yolunu, kendi tcl dosyasının yolu ile değiştireceksiniz

2 Beğeni

Bunu nereden değiştirebilirim?

setup.py dosysında include_files içinde.

   include_files = [r'tcl86t.dll',
                      r'tk86t.dll']

 )

burada onların yerine dosya yollarınızı yazın. Nasıl bulacağım diyorsanız yolu da python klasörü içinde DLLs içinde var bu dll ler.python Sizin bilgisayarınızda nerede kurulu bilmiyorum bu yüzden kendiniz bulmanız lazım pathi

Bir ihtimal sorun Program Files dizininden de kaynaklanıyor olabilir. Bu dizindeki boşluk karakteri sorun yaratıyor da olabilir.

hangi satırdan dolayı olabilir?

lütfen setup.py dosyasını şöyle yapar mısınız :

# -*- coding: utf-8 -*-

import os
import sys
from cx_Freeze import setup, Executable
build_exe_options = {"packages": ["tkinter", "sqlite3"]}
buildOptions = dict(
    packages = [],
    excludes = [],
    include_files = [r'C:\Users\casper\AppData\Local\Programs\Python\Python36\DLLs\tcl86t.dll',
                     r'C:\Users\casper\AppData\Local\Programs\Python\Python36\DLLs\tk86t.dll']

    )

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

setup(
    name = "isim",
    version = "0.1",
    description = "açıklama",
    options = dict(build_exe = buildOptions)

1 Beğeni

\U yu kaçış dizisi olarak görmüş olabilir " \\U "olarak kullanıp deneyebilirmisiniz tam emin değilim ama bir denesek yarar var

cmd de running build diye bir şey yazdı. ama .exe dosyası oluşturmadı.

C:\Users\casper\Desktop\asd>python setup.py build
running build

C:\Users\casper\Desktop\asd>

Programı .exe yaptığımında resimler gözükmüyordu. Bende resimleri .exe dosyasına attım. :slight_smile: Programı çalıştırınca resimler gözüküyor, ama resimler orda gözükünce biraz absürt gözüküyor ve bunun gözükmemesi için kodlarla nasıl yapacağımı anlamadım.

(sorun .exe yapıyor ama resimler gözükmüyor.)