[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: PYTHONPATH issue explanation
From: |
宋文武 |
Subject: |
Re: PYTHONPATH issue explanation |
Date: |
Sat, 17 Mar 2018 09:41:51 +0800 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/25.3 (gnu/linux) |
Hartmut Goebel <address@hidden> writes:
Hello,
> Hi,
>
> given the ongoing discussion around Python show that my explanation was
> not good enough. I'll try to summarize and give more background.
Thanks for the explanations and this one!
So I have more understanding of it and ideas...
>
> With regard to Python, guix currently has a major issue, which my
> proposals are addressing. There are other issues (like naming the
> executables, the "wrapper" script", etc.) which are not addressed
> here.
> [...]
Okay, the "major issue" is that we're using "PYTHONPATH", which will add
entries into "sys.path" before builtin ones. It's semantically wrong
and may (or had?) cause issues.
> Part 3 of my analysis lists three solutions for this, where only number
> 2 and 3 are "good choices".
Option 2, "GUIX_PYTHONHOME_X_Y" can not be used in the build-system
unless we make a union of python inputs, so I think we should go for 1
and optional (later) add 3 too:
- "GUIX_PYTHON_X_Y_SITE_PACKAGES" (X.Y is not a valid env identifier
in bash) is necessary for the "build" environment.
We don't make a union of all the inputs in the "build" environment, so
a PATH (contains multiples directories) like env have to be used to
let python find all its "site-packages" from inputs.
> Drawbacks: This might break Python appications expecting
> site-packages to be below sys.prefix.
We have a patch named "python-2.7-site-prefixes.patch" seems to handle
this, maybe we should do it for python3 too?
- Avoid any environment variable for the "profile" environment.
We have a union "profile" for all the python packages, so environment
variables can be totally avoided with the help of "venv".
> We could avoid GUIX-PYTHONHOME[23] if we stop resolving the symlinks
> at the correct point in iteration.
This is exactly what "venv" does! We only need to make the "profile"
a "venv" for python. For python3, a simple "pyvenv.cfg" file is
enough, for python2 I guess we have to make a union or copy files like
what "virtualenv" does.
I plan to implement option 1 by adding a "sitecustomize.py" (better
than modify "site.py") into the python packages, and modify
"search-path-specification" to use "GUIX_PYTHON_X_Y_SITE_PACKAGES".
How's that sound?
- Re: PYTHONPATH issue analysis - part 3, (continued)
Re: PYTHONPATH issue analysis - part 3, Hartmut Goebel, 2018/03/13
Re: PYTHONPATH issue analysis - part 3, Ricardo Wurmus, 2018/03/14
Re: PYTHONPATH issue explanation, Hartmut Goebel, 2018/03/15
Re: [PATCH] gnu: python: Honor 'GUIX_PYTHON_X_Y_SITE_PACKAGES'., 宋文武, 2018/03/17
Re: PYTHONPATH issue explanation, Hartmut Goebel, 2018/03/17
Re: PYTHONPATH issue explanation, 宋文武, 2018/03/17
Re: PYTHONPATH issue explanation, 宋文武, 2018/03/18