Welcome!
This is the community forum for my apps Pythonista and Editorial.
For individual support questions, you can also send an email. If you have a very short question or just want to say hello — I'm @olemoritz on Twitter.
I cannot import modules
-
First, very basic question. I literally cannot enter a change in the python text unless I swipe left. When I hit a button and the change registers the drop box will remain up and I cannot get it go down unless I swipe left. Surely, this was not the designers intention.
Second, I've got my python files on my phone but when I run my program and it tries to import another module I get an error. The error message is:
cannot import module __main__.dictionary_new.py
I have the dictionary_new.py open in the external files. I'm thinking that maybe my problem is that I cannot get the pycache folder into my phone. I touch the pycache folder which has a dictionary_new.pyc file in it but nothing happens when I click on it. Could that be the reason why the module is not being imported?
-
Also the text editor removed the dunderscores. The file says main.dictionary_new.py, as listed above. dunderscores are quite important so I don't why they have been programmed to be deleted.
-
Try removing the .py at the end.
Put text in backticks (`my text`) if you do not want the editor to interprete it as markdown.
-
I didn't have '.py' attached to begin with. Here is the exact syntax I'm using:
from openpyxl import load_workbook
from collections import Counter
import copy
import time
import operator
import sys
import cProfile
import re
from pprint import pprint
import collections
import osfrom dictionary_new import large_dict
from claims_new import pop_sent
from start_and_stop import infoEverything works until I hit
from dictionary_new
and it says the module is not found.That code clearly works on my laptop but it is not working on pythonista 3. I have the dictionary_new file in my external files, the same place as the file I'm using. Are you it doesn't have something to do with
__pychache__
?Also I didn't get an answer to the very basic necessity of being able to input changes into the file and exiting the editor without having to swipe left.
-
Don't have iPad around, but I assume that external files / bookmarks are not in sys.path. Try to add it to sys.path before importing. Works on desktop is irrelevant, IDE can add it, etc.
-
Try adding a leading dot as in
from .dictionary_new import large_dict
.Is your laptop running Python 3 or legacy Python (
python -V
)? -
Don't use relative imports. They also don't work outside of package.
Pythonista
sys.path
contains system paths and site-packages, -2, -3. Current / script dir is not insys.path
.If it works on desktop, IDE is probably adding it as I wrote. At least PyCharm does this for example.
What can you do?
a.py
:def a(): print('A')
b.py
in the same folder:import sys import os sys.path.insert(0, os.path.dirname(__file__)) import a a.a()
-
Putting a dot in front of the files doesn't work. I'm using Python 3.6. I don't know what you mean by sys.path. I also still don't have an answer my question about how do you register changes to the code other than swiping left. To be more clear when I touch the code and make a change, a pop up keyboard appears but I cannot make this pop keyboard go away unless I swipe left. Is that how it's supposed to be done? Because that seems rather strange to me.
-
@zrzka Thanks for helping me out but I cannot figure out what you want me to do? I'm still quite a rookie programmer so if you could speak in a somewhat more dumbed -down language that would help out. Reading over your post I can't really figure out what you're recommending.
-
Can you take a step back, and describe what folders you have, and what files are in each folder? What file are you prsssing "play" on, and where is it located?
The way pythonisya works, any imports must either
1) live in the same folder as the file you pressed play on
2) live in the site-packages folder
or
3) live in a folder that can be found in sys.pathtry this: before your import, insert the line:
import sys,os print(sys.path) print(os.path.abspath('.')) print(os.listdir())
and paste the results back here, or post to a gist.
As an aside, I am not sure if .pyc files can be imported in pythonista. Try using the .py file instead.
-
@bobsmith76 pressing
forces keyboard to disappear
-
@zrzka The current script gets added to sys.path, just before it is run. So, running file a can import b in the same path.
-
@JonB yup, taking back my comment. Just tried on iPhone and it really works. I had to do smth wrong before.
P..S. Admire all people writing scripts on iPhone, it's a nightmare for me ;)
-
@cvp thanks
-
I tried running my other files and I'm getting [errno 1] operation not permitted. And I tried this with a very simply file which is nothing other than:
import sys,os
print (sys.path)
print (os.path.abspath('.'))
print (os.listdir())def info():
order = [0, 0, 0, "#", 11, 14, 21, 71, 73, 79, 93, 178] get_words_used = 0 proof_type = 4
I also tried running the print commands like your recommended on the main file but I get the same error message as before. Also, I tried moving the files into the folder SCRIPT LIBRARY - THIS IPOD. but that didn't help. at the very end of the error message i do get the line:
pythonista3/documents and then it lists all the files in that folder and all the files that I need to run my program are in that file.
-
Here, I managed to copy the error message and email it to myself. This is what it says and this is for an even more basic code. All this code says is:
import sys,os
print (sys.path)
print (os.path.abspath('.'))
print (os.listdir())print ('hey')
And as you'll see it does print 'hey' at the bottom. Also when it says
'Examples', 'Templates', 'Welcome.md', 'init .py', 'claims_new.py', 'dictionary_new.py', 'intermed_code.py', 'new_code.py', 'site-packages-2', 'site-packages-3', 'start_and_stop.py']
Those are all the files I need to run my program. So they're all in the right place.
On second thought, I couldn't print the error message because your algorithm flagged it as spam, so you can read it here:
http://www.dreamincode.net/forums/blog/2557/entry-5112-to-be-deleted/
-
bobsmith,
We can only help you if you follow instructions exactly!
Insert those lines, then run your script, and Copy the entire output, along with the entire traceback, and paste that back here. Don't summarize it, paste the entire result.In short : if the script you are running, and the script you are importing are in the same folder, you should be able to import it. You should be using the .py file, not the .pyc, since .pyc files are not guaranteed to be compatible across versions.
You could also place the file you want to import under Modules & Libraries / site-packages (or, if it is a package, with an
__init__
, then the entire folder can be in site-packages) -
Also I just tried playing brickbreaker and it works on my ipod so my ipod is probably not the problem.
-
I told you that I tried to paste the traceback but your algorithm marked it as spam. So I pasted the traceback on another website. Did you read the traceback that I posted on the other website? Also, I have the
__init__
file in the same folder as my other files. It says that on the traceback that your algorithm blocked. -
Any idea what I should do now? I've done everything you told me so I don't understand why the help suddenly dried up?