Python Forum
Did interpreter 'compile' all import modules(from thrid-party)
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Did interpreter 'compile' all import modules(from thrid-party)
#1
Did interpreter 'compiles' all import modules(installed from third-party by pip) when a programme is running? I edited the code from site packages path, I found the editions reflect in the programme. However, all packages installed by pip should be binary code, I did not re make/build, why these editions were activated.
Reply
#2
No, stuff installed by pip does not have to be binary. Compiled C code is possible, but so is just regular python code.
jamesyuan likes this post
Reply
#3
Pure python modules are compiled into bytecode modules (.pyc files) when they are imported. Python loads the bytecode directly if the .pyc file is newer than the .py file. In your case, the next time you imported the module after your edits, it was "recompiled" and a new .pyc file was written.
jamesyuan likes this post
Reply
#4
(Oct-17-2020, 05:40 PM)bowlofred Wrote: No, stuff installed by pip does not have to be binary. Compiled C code is possible, but so is just regular python code.

Hi, thank you very much. Does compiled C means the code is written in Python and compiled by C compiler.
Reply
#5
(Oct-17-2020, 06:11 PM)Gribouillis Wrote: Pure python modules are compiled into bytecode modules (.pyc files) when they are imported. Python loads the bytecode directly if the .pyc file is newer than the .py file. In your case, the next time you imported the module after your edits, it was "recompiled" and a new .pyc file was written.

So much appreciation!

May I ask a further question? If the installed modules are binary, does interpreter also need to convert it to bytecode at first when I import them?
Reply
#6
jamesyuan Wrote:If the installed modules are binary, does interpreter also need to convert it to bytecode at first when I import them?
I don't understand what you mean by 'binary'. If (C extension) modules are distributed as shared libraries (.dll or .so), they are not converted to python bytecode. You could also have compiled .pyc file on the module path without their python source file. They would be imported as well.
jamesyan Wrote:Does compiled C means the code is written in Python and compiled by C compiler.
No, standard python code cannot be compiled by a C compiler.
Reply
#7
(Oct-18-2020, 07:09 AM)Gribouillis Wrote:
jamesyuan Wrote:If the installed modules are binary, does interpreter also need to convert it to bytecode at first when I import them?
I don't understand what you mean by 'binary'. If (C extension) modules are distributed as shared libraries (.dll or .so), they are not converted to python bytecode. You could also have compiled .pyc file on the module path without their python source file. They would be imported as well.
jamesyan Wrote:Does compiled C means the code is written in Python and compiled by C compiler.
No, standard python code cannot be compiled by a C compiler.

Thanks a lot, so, in general, all code(written by yourself and from third-party) will be converted into bytecode by interpreter, and then executed in virtual machine, right?
Reply
#8
Exactly.
jamesyuan likes this post
Reply
#9
(Oct-18-2020, 02:17 PM)Gribouillis Wrote: Exactly.

Big Grin Big Grin Big Grin Thanks a lot. .pyd(DLL) file could be imported directly, so it means the modules imported will be converted to byte code for VM, or pyd file consists of byte code. As Python interpreter does has Linker like C language, how and when dll files are used.
Reply
#10
Python source code (normally found in a .py file) is parsed and turned into bytecode by the interpreter. Then the python virtual machine executes the bytecode.

If this python code is a module (not a script), then the bytecode step is saved as a .pyc file. Future runs can load the pre-compiled bytecode for faster startup (but not faster execution).

If you want to import code from another language (like C/C++ or whatever) into a python project, you can do so. This will normally require compile to machine code and create a .so or .pyd file. These are not python bytecode and are not run by the python virtual machine, but called out to like any other shared library or DLL.

These binary extensions tend to be avoided when possible because the code is hardware or OS specific and can't be run by any python interpreter, but might be necessary for speed or for access to existing (non-python) code.
jamesyuan and Gribouillis like this post
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Different Ways to Import Modules RockBlok 2 539 Dec-11-2023, 04:29 PM
Last Post: deanhystad
  Import Modules TheBunyip 4 1,253 Mar-10-2023, 04:47 PM
Last Post: buran
  Running 3rd party libs on Steam Deck (Arch Linux) with restricted access metulburr 0 1,872 Jan-07-2023, 10:41 PM
Last Post: metulburr
  a bunch of modules to import Skaperen 2 902 Nov-07-2022, 07:33 PM
Last Post: Gribouillis
  Avoid third party functions to wrote my python code into system debug-log? mark 9 2,218 Apr-09-2022, 08:41 PM
Last Post: mark
  How to use a function from third party library? rrowhe4d 2 1,870 Aug-31-2021, 04:30 PM
Last Post: Larz60+
  python interpreter won't import packages greenpy 1 1,984 Sep-11-2020, 07:47 PM
Last Post: buran
  installing third-party modules shabux 5 3,467 Apr-13-2020, 12:41 AM
Last Post: Larz60+
  Import all items from all modules from package DD169 3 2,124 Jan-25-2020, 12:33 PM
Last Post: buran
  How to detect third party packages used in the code SriRajesh 5 2,988 Sep-21-2019, 05:59 AM
Last Post: ndc85430

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020