Is it possible to import a compiled python file?
Asked Answered
H

6

25

I can't seem to figure out how to import a compiled .pyc module into my code so I can use it within my main script. Is this even possible?

Housman answered 28/3, 2012 at 18:2 Comment(1)
Just FYI. PyDev has a bug with importing pyc file. https://mcmap.net/q/196137/-pydev-and-pyc-filesDurning
J
24

If there is foo.pyc, import foo will automatically use foo.pyc whether foo.py exists or not

(If foo.py is newer, it will be used)

http://docs.python.org/tutorial/modules.html

Jorgejorgensen answered 28/3, 2012 at 18:9 Comment(2)
Import wasn't working for me in the interpreter (IPython). I tested it in a script and it worked. Can it be done in the interpreter?Housman
Never mind. Found the problem, I was in the wrong working dir. Thanks for the help.Housman
R
16

In a nutshell, to import a Python compiled file (e.g. module.pyc) only, simply place it in the same directory where the source (e.g module.py) would be, and ensure that there is no corresponding source file (module.py in our example) there. Then the usual import module will work seamlessly.

If there is a source file in the same directory as the compiled file, Python will use the compiled file in the __pycache__ directory instead, or recompile from source if it's not there.

If you remove the source file without putting a ".pyc" in the same directory, the import will fail even if the compiled file exists in the __pycache__ directory. Also note that files under __pycache__ follow a different naming convention. If you copy them across, make sure that they are renamed so that it has the same name as the source file, except that the extension must be "pyc" rather than "py".

There is a very nice flow chart in PEP 3147 linked from the documentation.

Retiring answered 30/7, 2020 at 15:23 Comment(0)
G
3

Use the import without the extension. Python will than look if the file has changed, if not it will use the previously created pyc file.

But note that if you really want more performance, I recommend you to use PyPy which is a lot faster than the standard CPython implementation. (But note that it is still Python 2)

Goldeneye answered 28/3, 2012 at 19:15 Comment(2)
This seems like an advertisement; the OP didn't ask about speed, and is a newbie and therefore unlikely to be focused on speed.Gigantes
@Gigantes It's always funny when someone digs out one of my old SA answers and I read it again and I'm like D'oh. You are right this does not exactly answer the original question, but asking for loading compiled code I guess I've just wanted to suggest an alternative based on my suspection of OPs intention.Goldeneye
E
2

import module

If there's a .py source file, the core will automatically use the .pyc if it's up to date.

If there's no source, python will automatically import .pyc.

Read more about “compiled” Python files here.

Energize answered 28/3, 2012 at 18:7 Comment(3)
import filename.py won't work. You don't specify the .py suffix in an import statement.Caitlin
and how can I import it from different location?Viridis
help("import")Energize
T
1

Yes, but caveat that with make sure to start python with the "-O" option! In my personal experience, if all you have is that .pyc or .pyo file, running "python.exe" without the flag and trying to import will fail, however running python.exe -O and then trying to import as normal should work.

Tingle answered 6/3, 2015 at 2:58 Comment(0)
S
0

In import use the pyc file name,python will automatically load it.

Slime answered 28/3, 2012 at 18:10 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.