classification
Title: "SO" config var not getting set
Type: behavior Stage:
Components: Distutils Versions: Python 3.4
process
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: barry Nosy List: Marc.Abramowitz, barry, doko, haypo, python-dev
Priority: normal Keywords:

Created on 2013-11-11 17:29 by Marc.Abramowitz, last changed 2014-03-09 22:50 by python-dev. This issue is now closed.

Files
File name Uploaded Description Edit
issue19555.txt barry, 2013-11-11 19:56 review
Messages (12)
msg202634 - (view) Author: Marc Abramowitz (Marc.Abramowitz) * Date: 2013-11-11 17:29
I just installed Python 3.0a4 from source on an Ubuntu system and noticed that it doesn't seem to set the distutils.sysconfig config var: "SO":

```
vagrant@ubuntu:~/src/Python-3.4.0a4$ python3.4
Python 3.4.0a4 (default, Nov 11 2013, 17:11:59)
[GCC 4.6.3] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from distutils import sysconfig
>>> sysconfig.get_config_var("SO")
>>> sysconfig.get_config_var("SO") is None
True
```

This worked fine for me in Python 3.3:

```
vagrant@ubuntu:~/src/Python-3.4.0a4$ python3.3
Python 3.3.2 (default, May 16 2013, 18:32:41)
[GCC 4.6.3] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from distutils import sysconfig
>>> sysconfig.get_config_var("SO")
'.so'
```
msg202637 - (view) Author: Barry A. Warsaw (barry) * (Python committer) Date: 2013-11-11 18:19
Indeed, this happens for me too in default head.
msg202638 - (view) Author: Barry A. Warsaw (barry) * (Python committer) Date: 2013-11-11 18:21
Never mind, this is an intentional change:

- Issue #16754: Fix the incorrect shared library extension on linux. Introduce
  two makefile macros SHLIB_SUFFIX and EXT_SUFFIX. SO now has the value of
  SHLIB_SUFFIX again (as in 2.x and 3.1). The SO macro is removed in 3.4.

Although this does introduce some backward compatibility issues.  Perhaps sysconfig.get_config_var('SO') should be deprecated in 3.4 and removed in 3.5.
msg202639 - (view) Author: Marc Abramowitz (Marc.Abramowitz) * Date: 2013-11-11 18:27
Thanks Barry, for tracking down that this is intentional.

I wonder how one gets this value in Python code now? For example, the reason I stumbled upon this in the first place is that there is some code in PyCrypto (https://github.com/dlitz/pycrypto/blob/master/lib/Crypto/SelfTest/PublicKey/test_RSA.py#L464) that uses `get_config_var("SO")` thusly:

```
    except ImportError:
        from distutils.sysconfig import get_config_var
        import inspect
        _fm_path = os.path.normpath(os.path.dirname(os.path.abspath(
            inspect.getfile(inspect.currentframe())))
            +"/../../PublicKey/_fastmath"+get_config_var("SO"))
        if os.path.exists(_fm_path):
            raise ImportError("While the _fastmath module exists, importing "+
                "it failed. This may point to the gmp or mpir shared library "+
                "not being in the path. _fastmath was found at "+_fm_path)
```

What would be the way to express this now in Python >= 3.4?
msg202648 - (view) Author: Barry A. Warsaw (barry) * (Python committer) Date: 2013-11-11 19:56
Here's a patch, sans NEWS and any docs.
msg202649 - (view) Author: Barry A. Warsaw (barry) * (Python committer) Date: 2013-11-11 19:57
Note that obviously the DeprecationWarning is not raised if you do

sysconfig.get_config_vars()['SO']

but it still gets mapped to EXT_SUFFIX in that case.
msg202650 - (view) Author: Barry A. Warsaw (barry) * (Python committer) Date: 2013-11-11 20:01
On Nov 11, 2013, at 06:27 PM, Marc Abramowitz wrote:

>What would be the way to express this now in Python >= 3.4?

For now, use sysconfig.get_config_var('EXT_SUFFIX') though if no one objects
to my patch, I'll restore 'SO' for 3.4.  We'll add a DeprecationWarning and
get rid of it in 3.5.
msg203701 - (view) Author: Roundup Robot (python-dev) Date: 2013-11-21 23:57
New changeset fedc2b8fbb6e by Barry Warsaw in branch 'default':
- Issue #19555: Restore sysconfig.get_config_var('SO'), with a
http://hg.python.org/cpython/rev/fedc2b8fbb6e
msg203735 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2013-11-22 10:58
Test is failing on Windows:

http://buildbot.python.org/all/builders/x86%20Windows%20Server%202003%20%5BSB%5D%203.x/builds/1758/steps/test/logs/stdio

======================================================================
ERROR: test_SO_in_vars (test.test_sysconfig.TestSysConfig)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "E:\Data\buildslave\cpython\3.x.snakebite-win2k3r2sp2-x86\build\lib\test\test_sysconfig.py", line 388, in test_SO_in_vars
    self.assertIsNotNone(vars['SO'])
KeyError: 'SO'

======================================================================
FAIL: test_SO_value (test.test_sysconfig.TestSysConfig)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "E:\Data\buildslave\cpython\3.x.snakebite-win2k3r2sp2-x86\build\lib\test\test_sysconfig.py", line 382, in test_SO_value
    sysconfig.get_config_var('EXT_SUFFIX'))
AssertionError: None != '.pyd'
msg203793 - (view) Author: Roundup Robot (python-dev) Date: 2013-11-22 16:08
New changeset 331b7a8bb830 by Barry Warsaw in branch 'default':
A fix for issue 19555 on Windows.
http://hg.python.org/cpython/rev/331b7a8bb830
msg203865 - (view) Author: Roundup Robot (python-dev) Date: 2013-11-22 20:31
New changeset 8a130fd92255 by Barry Warsaw in branch 'default':
Issue 19555 for distutils, plus a little clean up (pyflakes, line lengths).
http://hg.python.org/cpython/rev/8a130fd92255
msg212996 - (view) Author: Roundup Robot (python-dev) Date: 2014-03-09 22:50
New changeset ac2ee9fc353a by R David Murray in branch 'default':
whatsnew: deprecation of sysconfig SO key (#19555).
http://hg.python.org/cpython/rev/ac2ee9fc353a
History
Date User Action Args
2014-03-09 22:50:24python-devsetmessages: + msg212996
2013-11-22 20:31:56python-devsetmessages: + msg203865
2013-11-22 16:09:39barrysetstatus: open -> closed
resolution: fixed
2013-11-22 16:08:38python-devsetmessages: + msg203793
2013-11-22 15:03:34barrysetassignee: barry
2013-11-22 10:58:48hayposetstatus: closed -> open

nosy: + haypo
messages: + msg203735

resolution: fixed -> (no value)
2013-11-22 01:12:14barrysetstatus: open -> closed
resolution: fixed
2013-11-21 23:57:49python-devsetnosy: + python-dev
messages: + msg203701
2013-11-11 20:01:16barrysetmessages: + msg202650
title: SO configuration variable should be deprecated in 3.4 -> "SO" config var not getting set
2013-11-11 19:57:39barrysetmessages: + msg202649
2013-11-11 19:56:30barrysettitle: "SO" config var not getting set -> SO configuration variable should be deprecated in 3.4
2013-11-11 19:56:03barrysetfiles: + issue19555.txt

messages: + msg202648
2013-11-11 18:27:26Marc.Abramowitzsetmessages: + msg202639
2013-11-11 18:22:04barrysetnosy: + doko
2013-11-11 18:21:08barrysetmessages: + msg202638
2013-11-11 18:19:15barrysetnosy: + barry
messages: + msg202637
2013-11-11 17:58:02brett.cannonsetassignee: eric.araujo -> (no value)

nosy: - tarek, eric.araujo
2013-11-11 17:29:57Marc.Abramowitzcreate