Python 3.6 to executable - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: Data Science (https://python-forum.io/forum-44.html) +--- Thread: Python 3.6 to executable (/thread-7424.html) Pages:
1
2
|
Python 3.6 to executable - DeGerlash - Jan-09-2018 Hi everyone I've been coding a program for a friend that I would like that friend to be able to use smoothly. I thus should be able to convert it to an executable. This, I am able to do using pyinstaller (which supports Python 3.6). My program generally goes as follows: I use a while loop to be able to repeat the program as much as the user likes to, and then I ask some simple input from the user, after which the big part of the program runs. It all works smoothly in my IDLE (Thonny), and it does also when running the .py file through cmd. But when I use pyinstaller to create an executable and then run the executable, I get the first part of the program working, but as soon as I enter the answer to the last input question, the cmd window flashes some chunk of text en closes immediately. I figured this is because of the modules I use in the program (for example random and time and readlines and stuff), and this idea was confirmed by looking at the warn file that pyinstaller (I guess) had installed. It reported of numerous modules that were unfound running the program. This is all actually just background information and may be irrelevant to my question, which goes as follows: What is the best way to send a friend a program I coded? By 'best' I mean it being as easy as possible for a friend to just simply run the program. Thanks in advance! RE: Python 3.6 to executable - snippsat - Jan-09-2018 (Jan-09-2018, 10:05 PM)DeGerlash Wrote: the cmd window flashes some chunk of text en closes immediately. I figured this is because of the modules I use in the program (for example random and time and readlines and stuff)No it will always close cmd window after program is finish,if start bye double-clicking. Start cmd first then start .exe window will stay. There are some solution the simplest is adding this line last. input('--- Press <Enter> to exit ---') (Jan-09-2018, 10:05 PM)DeGerlash Wrote: What is the best way to send a friend a program I coded? By 'best' I mean it being as easy as possible for a friend to just simply run the program.If he/she is a Windows user and don't have Python installed and maybe not so technically minded, then .exe is the simplest. If have Python installed then you could make wheel. Then all is packed in that wheel file and install is pip install wheel_name.whl .
RE: Python 3.6 to executable - DeGerlash - Jan-10-2018 Yes, I figured that solution and put it in my code, the program should always wait for the user to close it, that's how I coded it. And yes, I do understand that a .exe file would be the easiest way to transfer it to a friend, but I'm looking for a solution to incoorporate the imported modules within the .exe file. Does anyone have experience with that? This is the 'warn'-file I get in the 'build'-map. Quote:missing module named resource - imported by posix, C:\Users\Adriaan\Bureaublad\EnglishWordGenerator2.py RE: Python 3.6 to executable - snippsat - Jan-10-2018 Quote:This is the 'warn'-file I get in the 'build'-map.Just ignore the warnings you get in middle unfortunately it's normal with pyinstaller,the message you last get last is most important. If get error here like don't find module,then most fix it.Exmaple in this post build a .exe with Pandas(has a lot of dependencies). There was a error last that has to fixed,added a module with hiddenimport .Also in that post use virtual environment to have better control of dependencies. RE: Python 3.6 to executable - DeGerlash - Jan-10-2018 Could you explain more in detail how I should do that then? Here's the python code: from time import time import random key=input("Press any key and then enter to start ... ") while key!="": alphabet=["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"] distribution=[0,0,1,6,26,52,85,122,140,140,126,101,75,52,32,20,10,6,3,2,1,1,0,0,0,0] word="" counter=0 wordtype="" chance=0 timeonbatteryseconds=0 timeonACseconds=0 runlengthcalculator=0 x=0 y=0 timescounter=0 howmanywords=0 def howmany(wordlength): howmanywords=0 if language=="dutch" or language=="Dutch" or language=="nl" or language=="NL" or language=="nederlands" or language=="Nederlands" or language=="Nl": file = open("DutchWords.txt", "r") for element in file.readlines(): if len(str(element))==int(wordlength)+1: howmanywords+=1 return howmanywords if wordtype=="common": file = open("CommonEnglishWords.txt", "r") for element in file.readlines(): if len(str(element))==int(wordlength)+1: howmanywords+=1 return howmanywords if wordtype=="all": file = open("AllEnglishWords.txt", "r") for element in file.readlines(): if len(str(element))==int(wordlength)+1: howmanywords+=1 return howmanywords def isValid(word): if language=="dutch" or language=="Dutch" or language=="nl" or language=="NL" or language=="nederlands" or language=="Nederlands" or language=="Nl": file = open("DutchWords.txt", "r") if word in file.read(): return True else: return False if wordtype=="common": file = open("CommonEnglishWords.txt", "r") if word in file.read(): return True else: return False if wordtype=="all": file = open("AllEnglishWords.txt", "r") if word in file.read(): return True else: return False language=input("What language do you wish to proceed in? (dutch/english) ") if language=="" or language=="choose" and language!="dutch" and language!="Dutch" and language!="nl" and language!="NL" and language!="nederlands" and language!="Nederlands" and language!="Nl" and language!="english" and language!="English" and language!="Eng" and language!="eng": decider=random.randint(0,1) if decider==0: language="English" print("I'm gonna go with English.") if decider==1: language="Dutch" print("Laten we nederlands nemen.") if language=="english" or language=="English" or language=="Eng" or language=="eng": wordtype=input("What words do you want to generate? (common/all) ") if wordtype=="choose" or wordtype=="": decider=random.randint(0,1) if decider==0: wordtype="common" print("Let's only generate common words.") if decider==1: wordtype="all" print("Let's generate all words!") wordlength=input("How many characters do you want the word to have? ") if language=="dutch" or language=="Dutch" or language=="nl" or language=="NL" or language=="nederlands" or language=="Nederlands" or language=="Nl": wordlength=input("Hoelang moet het woord zijn? ") if wordlength=="choose" or wordlength=="kies" or wordlength=="kies maar" or wordlength=="kies zelf" or wordlength=="goh kies maar zelf" or wordlength=="goh kies maar" or wordlength=="aan u de keuze" or wordlength=="": x=random.randint(0,999) wordlength=7 if x==0: wordlength=1 for element in distribution: if x in range(y+1,y+element): wordlength=timescounter break timescounter+=1 y+=element chance=float(((howmany(wordlength))/(26**wordlength))*100) timeonbatteryseconds=float(((26**int(wordlength))*1.5)*(10**(-9))) timeonACseconds=float(((26**int(wordlength))*3.6)*(10**(-9))) if language=="dutch" or language=="Dutch" or language=="nl" or language=="NL" or language=="nederlands" or language=="Nederlands" or language=="Nl": print("Laten we "+str(wordlength)+" letters nemen.") print("De kans dat dit me lukt is "+str(chance)+"%, want er zijn "+str(howmany(wordlength))+" nederlandse woorden met "+str(wordlength)+" letters.") #print("Aan netstroom zou dit ongeveer "+str(timeonACseconds)+" seconden duren.") #print("Op batterijstroom duurt dit waarschijnlijk echter "+str(timeonbatteryseconds)+" seconden. Maar ondertussen al weer minder natuurlijk!") print("Aan het genereren...") if language=="english" or language=="English" or language=="Eng" or language=="eng": if wordtype=="common": print("The chance of me pulling this off is "+str(chance)+"%, as there are "+str(howmany(wordlength))+" common English words with "+str(wordlength)+" characters.") if wordtype=="all": print("The chance of me pulling this off is "+str(chance)+"%, as there are "+str(howmany(wordlength))+" English words with "+str(wordlength)+" characters.") print("I'm gonna go for "+str(wordlength)+" characters.") #print("On AC power, this should take around "+str(timeonACseconds)+" seconds.") #print("On battery power, this'll probably take "+str(timeonbatteryseconds)+" seconds. But now already a lot less of course!") print("Generating...") else: wordlength=int(wordlength) chance=float(((howmany(wordlength))/(26**wordlength))*100) timeonbatteryseconds=float((26**int(wordlength))/(1.5*(10**9))) timeonACseconds=float((26**int(wordlength))/(3.6*(10**9))) if language=="dutch" or language=="Dutch" or language=="nl" or language=="NL" or language=="nederlands" or language=="Nederlands" or language=="Nl": print("De kans dat dit me lukt is "+str(chance)+"%, want er zijn "+str(howmany(wordlength))+" nederlandse woorden met "+str(wordlength)+" letters.") #print("Aan netstroom zou dit ongeveer "+str(timeonACseconds)+" seconden duren.") #print("Op batterijstroom duurt dit waarschijnlijk echter "+str(timeonbatteryseconds)+" seconden. Maar ondertussen al weer minder natuurlijk!") print("Aan het genereren...") if language=="english" or language=="English" or language=="Eng" or language=="eng": if wordtype=="common": print("The chance of me pulling this off is "+str(chance)+"%, as there are "+str(howmany(wordlength))+" common English words with "+str(wordlength)+" characters.") if wordtype=="all": print("The chance of me pulling this off is "+str(chance)+"%, as there are "+str(howmany(wordlength))+" English words with "+str(wordlength)+" characters.") #print("On AC power, this should take around "+str(timeonACseconds)+" seconds.") #print("On battery power, this'll probably take "+str(timeonbatteryseconds)+" seconds. But now already a lot less of course!") print("Generating...") starttime=time() while counter<=wordlength: word=word+alphabet[random.randint(0,25)] if len(word)==wordlength: if isValid("\n"+word+"\n")==True: if language=="english" or language=="English" or language=="Eng" or language=="eng": print("The generated word is: "+word) if language=="dutch" or language=="Dutch" or language=="nl" or language=="NL" or language=="nederlands" or language=="Nederlands" or language=="Nl": print("Het gecreëerde woord is: "+word) else: word="" counter=0 counter=counter+1 runlengthcalculator=runlengthcalculator+1 endtime=time() timetaken=endtime-starttime if language=="dutch" or language=="Dutch" or language=="nl" or language=="NL" or language=="nederlands" or language=="Nederlands" or language=="Nl": print("Dit heeft ongeveer "+str(round(timetaken,2))+" seconden geduurd.") key=input("Druk op eender welke toets en dan enter om een ander woord te creëren, druk enter om af te sluiten ... ") if language=="english" or language=="English" or language=="Eng" or language=="eng": print("This took around "+str(round(timetaken,2))+" seconds.") key=input("Press any key and then enter to generate another word, press enter to close ... ") counter=0 RE: Python 3.6 to executable - snippsat - Jan-10-2018 Here a run,i must use virtual environment because pyinstaller give error on my messy OS python. I use cmder,but command is the same in cmd except(ls which is dir(cmd)). # Make enviroment C:\1 λ python -m venv qustion_env # cd in C:\1 λ cd qustion_env # Activate enviroment,will see (qustion_env) C:\1\qustion_env λ C:\1\qustion_env\Scripts\Activate # Install pyinstaller (qustion_env) C:\1\qustion_env λ pip install pyinstaller Collecting pyinstaller Collecting future (from pyinstaller) Collecting pefile>=2017.8.1 (from pyinstaller) Collecting macholib>=1.8 (from pyinstaller) Using cached macholib-1.9-py2.py3-none-any.whl Requirement already satisfied: setuptools in c:\1\qustion_env\lib\site-packages (from pyinstaller) Collecting altgraph>=0.15 (from macholib>=1.8->pyinstaller) Using cached altgraph-0.15-py2.py3-none-any.whl Installing collected packages: future, pefile, altgraph, macholib, pyinstaller Successfully installed altgraph-0.15 future-0.16.0 macholib-1.9 pefile-2017.11.5 pyinstaller-3.3.1 # Install pypiwin32 needed bye pyinstaller (qustion_env) C:\1\qustion_env λ pip install pypiwin32 Collecting pypiwin32 Using cached pypiwin32-220-cp36-none-win32.whl Installing collected packages: pypiwin32 Successfully installed pypiwin32-220 # Your file is game.py (qustion_env) C:\1\qustion_env λ ls Include/ Lib/ Scripts/ game.py pip-selfcheck.json pyvenv.cfg # Run pyinstaller (qustion_env) C:\1\qustion_env λ pyinstaller --onefile game.py .... a lot installing ..... # To the game game.exe and test it (qustion_env) C:\1\qustion_env λ cd dist (qustion_env) C:\1\qustion_env\dist λ ls game.exe* (qustion_env) C:\1\qustion_env\dist λ game.exe Press any key and then enter to start ... j What language do you wish to proceed in? (dutch/english) english What words do you want to generate? (common/all) common How many characters do you want the word to have? 4 Traceback (most recent call last): File "game.py", line 120, in <module> File "game.py", line 28, in howmany FileNotFoundError: [Errno 2] No such file or directory: 'CommonEnglishWords.txt'So .exe work as it should,it stop because i don't have CommonEnglishWords.txt ,this is a file you have local on disk. RE: Python 3.6 to executable - DeGerlash - Jan-10-2018 So I need to run all that in cmd? I'm sorry I don't really understand, my English is not so good... RE: Python 3.6 to executable - snippsat - Jan-10-2018 You can try. pyinstaller --onefile game.pyThis is done from cmd in folder of where you have your file. You can look at Python 3.6 and pip installation under Windows This to make sure that python and pip command work from anywhere in cmd.Example to make sure you have newest pyinstaller. pip install -U pyinstaller pip install -U pypiwin32It don't work to make .exe then you follow my way over, which is good exercise in command line stuff which is important in programming. RE: Python 3.6 to executable - DeGerlash - Jan-12-2018 It still doesn't work, just closes like before. Your way over doesn't seem to work as well, but I'm sure I'm doing something wrong. It says I have perfect pyinstaller and pypiwin32 on my pc! RE: Python 3.6 to executable - snippsat - Jan-12-2018 (Jan-12-2018, 01:41 PM)DeGerlash Wrote: It still doesn't work, just closes like before.What do you mean do the .exe start and it close after finish? If that's the case as mention before in last line. input('--- Press <Enter> to exit ---')Star cmd first(not double_click on .exe)then navigate to .exe and start it. Doing it like this then cmd window stay open and you can see if there is a error message. (Jan-12-2018, 01:41 PM)DeGerlash Wrote: Your way over doesn't seem to work as well, but I'm sure I'm doing something wrong.I think you most do something that i don't do,every step i do is in my post and game.py is just copy and paste of your code.It generate for me a working game.exe .
|