By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
464,699 Members | 1,243 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 464,699 IT Pros & Developers. It's quick & easy.

[2to3] Bug converting import

P: n/a
Hi

Given the following two files in the same directory

Master.py:
----------
#!/usr/bin/python
import Slave
Slave.main()

and
Slave.py:
---------
def main() :
print "Hello World"

Invoking Master.py under python-2.5.2
works just fine.

2to3 converts these to

Master.py:
----------
from . import Slave
Slave.main()

I have added the first line
#!/usr/local/bin/python3.0
manually

Slave.py:
---------
def main() :
print("Hello World")
Now, when I invoke Master.py I get

Traceback (most recent call last):
File "Master.py", line 2, in <module>
from . import Slave
ValueError: Attempted relative import in non-package
thanks for looking into it,

Helmut Jarausch

Lehrstuhl fuer Numerische Mathematik
RWTH - Aachen University
D 52056 Aachen, Germany
Jun 27 '08 #1
Share this Question
Share on Google+
1 Reply

P: n/a
Helmut Jarausch wrote:
Now, when I invoke Master.py I get

Traceback (most recent call last):
File "Master.py", line 2, in <module>
from . import Slave
ValueError: Attempted relative import in non-package
thanks for looking into it,
The cause of the bug is in fixes/fix_import.py
probably_a_local_import(). The function doesn't check if
dirname(file_path) is a package.

This patch should fix the bug:

Index: Lib/lib2to3/fixes/fix_import.py
================================================== =================
--- Lib/lib2to3/fixes/fix_import.py (Revision 64490)
+++ Lib/lib2to3/fixes/fix_import.py (Arbeitskopie)
@@ -53,8 +53,13 @@
# Must be stripped because the right space is included by the parser
imp_name = imp_name.split('.', 1)[0].strip()
base_path = dirname(file_path)
- base_path = join(base_path, imp_name)
- for ext in ['.py', pathsep, '.pyc', '.so', '.sl', '.pyd']:
- if exists(base_path + ext):
+ base_name = join(base_path, imp_name)
+ base_init = join(base_path, "__init__")
+ exts = ['.py', pathsep, '.pyc', 'pyo', '.so', '.sl', '.pyd']
+ if not any(exists(base_init + ext) for ext in exts):
+ # not a package
+ return False
+ if any(exists(base_name + ext) for ext in exts):
return True
return False

Jun 27 '08 #2

This discussion thread is closed

Replies have been disabled for this discussion.