This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: building with 2to3 generates wrong import paths because build_ext is run after build_py
Type: behavior Stage: resolved
Components: Distutils Versions: Python 3.5
process
Status: closed Resolution: out of date
Dependencies: Superseder:
Assigned To: Nosy List: Arfrever, alexis, curioswati, dstufft, eric.araujo, simohe, steve.dower, tarek, vstinner
Priority: normal Keywords: patch

Created on 2011-11-01 21:32 by simohe, last changed 2022-04-11 14:57 by admin. This issue is now closed.

Files
File name Uploaded Description Edit
iss_13317.patch curioswati, 2015-12-23 05:14 review
Messages (10)
msg146808 - (view) Author: simohe (simohe) Date: 2011-11-01 21:32
We need build_ext before build_py. Otherwise, when 2to3 is called (in build_py), it will not find ext modules, thinking that those modules are global and, consequently, making a mess, now that all module imports are global.
msg146944 - (view) Author: Éric Araujo (eric.araujo) * (Python committer) Date: 2011-11-03 16:33
Hello and thanks for the report.

> We need build_ext before build_py. Otherwise, when 2to3 is called (in build_py),
> it will not find ext modules,
Why is 2to3 interested in extension modules?  2to3 converts Python code, extension modules are written in C or C++.

> thinking that those modules are global
I don’t understand what you mean.

Can you give me a Python or shell script to reproduce the error or a full description of what you did, what you expected and what went wrong?
msg146979 - (view) Author: simohe (simohe) Date: 2011-11-03 20:51
fix_imports rewrites the import statements to local or global. When a python module loads a local extension module, this import statement should be converted to a local import (from . import extensionmodule). But when the extension module is not built yet, fix_imports does not find them (no file named extenstionmodule.[so|sl]). So it suggests a global import (import extensionmodule).


The original comment is a slightly modified version of this here:
http://selenic.com/hg/file/afc02adf4ded/contrib/setup3k.py#l223


short summary:

build.sub_commands in distutils.command.build should list "build_ext" before "build_py".
lib2to3.fixes.fix_import will write global instead of local import statements else.
msg148044 - (view) Author: Éric Araujo (eric.araujo) * (Python committer) Date: 2011-11-21 14:35
Ah, thanks for clarifying, I didn’t understand what you meant with local/global but now I see it’s about absolute imports and explicit relative imports.  (I don’t remember ever reading that terminology before looking at fix_import.)

I’m adding the “easy” keyword because it should not be too hard to write tests for this, with the examples and helpers we already have in the test suite and given that I’m available for help.
msg183926 - (view) Author: Éric Araujo (eric.araujo) * (Python committer) Date: 2013-03-11 04:35
For the record this is caused by #17393
msg256133 - (view) Author: Swati Jaiswal (curioswati) * Date: 2015-12-09 02:59
are you working on it @eric?
msg256811 - (view) Author: Éric Araujo (eric.araujo) * (Python committer) Date: 2015-12-21 21:55
I’m not active in python-dev anymore.

The fix was noted in a previous comment:

build.sub_commands in distutils.command.build should list "build_ext" before "build_py".
lib2to3.fixes.fix_import will write global instead of local import statements else.
msg256899 - (view) Author: Swati Jaiswal (curioswati) * Date: 2015-12-23 05:14
Can someone help with tests? I just need a pointer on how to do it.
msg348637 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2019-07-29 11:47
This issue is no newcomer friendly, I remove the "easy" keyword.
msg386277 - (view) Author: Steve Dower (steve.dower) * (Python committer) Date: 2021-02-03 18:10
Distutils is now deprecated (see PEP 632) and all tagged issues are being closed. From now until removal, only release blocking issues will be considered for distutils.

If this issue does not relate to distutils, please remove the component and reopen it. If you believe it still requires a fix, most likely the issue should be re-reported at https://github.com/pypa/setuptools
History
Date User Action Args
2022-04-11 14:57:23adminsetgithub: 57526
2021-02-03 18:10:32steve.dowersetstatus: open -> closed

nosy: + steve.dower
messages: + msg386277

resolution: out of date
stage: needs patch -> resolved
2019-07-29 11:47:55vstinnersetkeywords: - easy
nosy: + vstinner
messages: + msg348637

2015-12-23 05:14:03curioswatisetfiles: + iss_13317.patch
keywords: + patch
messages: + msg256899
2015-12-21 21:55:29eric.araujosetversions: + Python 3.5, - 3rd party, Python 3.2, Python 3.3
nosy: + dstufft

messages: + msg256811

assignee: eric.araujo ->
components: - Distutils2
2015-12-09 02:59:00curioswatisetnosy: + curioswati
messages: + msg256133
2013-03-11 04:35:01eric.araujosetmessages: + msg183926
2011-11-21 14:35:24eric.araujosetassignee: tarek -> eric.araujo
type: behavior
components: + Distutils2, - 2to3 (2.x to 3.x conversion tool)
versions: + 3rd party, Python 3.2, Python 3.3
keywords: + easy
nosy: + alexis

messages: + msg148044
stage: needs patch
2011-11-05 22:42:51Arfreversetnosy: + Arfrever
2011-11-03 20:51:34simohesetnosy: + tarek
messages: + msg146979

assignee: tarek
components: + Distutils, - Build
2011-11-03 16:33:50eric.araujosetnosy: + eric.araujo
messages: + msg146944
2011-11-01 21:32:12simohecreate