Skip to content

Request: Add a step-by-step guide explaining how to get a portable python build on linux #9

Open

Description

@fyhertz

Hello,

Thank your your work on this tool !

I'm trying to get a portable build of python 3.10 out of portable-python and I'm probably missing something because builds are... not portable :'(

Here is what I have tried to far in docker running ubuntu:18.04

apt update && apt install python3-pip gcc make libffi-dev zlib1g-dev
pip3 install portable-python
portable-python build 3.10.9

The build succeeds but the resulting python build is linked against libffi and libz:

        prefix  /build/ppp-marker/3.9.16
          _bz2  *absent* None
       _ctypes  1.1.0 _ctypes*.so ffi:6
       _curses  *absent* None
          _dbm  *absent* None
      _decimal  1.70 _decimal*.so
         _gdbm  *absent* None
         _lzma  _lzma*.so
      _sqlite3  *absent* None
          _ssl  *absent* None
      _tkinter  *absent* None
         _uuid  *absent* None
           pip  22.0.4 lib/python3.9/site-packages/pip
       pyexpat  2.5.0 pyexpat*.so
      readline  *absent* None
    setuptools  58.1.0 lib/python3.9/site-packages/setuptools
          zlib  1.2.11 zlib*.so z:1
  libpython*.a  67 MB lib/libpython3.9.a lib/python3.9/config-3.9-x86_64-linux-gnu/libpython3.9.a
 libpython*.so  -not used-
  install size  122 MB
ERROR Build failed: Uses system libs: /lib/x86_64-linux-gnu/libz.so.1 /usr/lib/x86_64-linux-gnu/libffi.so.6
INFO Compiling cpython took 6 minutes 46 seconds
INFO Overall compilation took 6 minutes 57 seconds

What should I do to get a fully portable build? And could we document that in a step-by-step how-to guide?

Activity

  1. zsimic commented on Mar 4, 2023

    @zsimic
    Contributor

    So sorry I failed to respond earlier, got distracted by other projects.
    I will add such a guide, it is lacking indeed!

    To see what is going to end up compiled in as shared vs static, you can run the build-report command as in: portable-python build-report 3.9.16, the output tries to tell you what is going to be shared vs static, and why

    Contrast that with what would happen if you explicitly asked it to do say "openssl" and "readline" as static: use the -m (short for --modules) CLI flag for example:

    portable-python build-report 3.9.16 -m openssl,readline
    

    What modules to compile in statically can also be configured, with a section like this (this is what I use on macos):

    macos:
      cpython-modules: xz openssl gdbm
    
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationImprovements or additions to documentationgood first issueGood for newcomers

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions