[Q] ImportError by __import__() on Python >= 3.4
MRAB
python at mrabarnett.plus.com
Fri Jun 3 14:15:52 EDT 2016
More information about the Python-list mailing list
Fri Jun 3 14:15:52 EDT 2016
- Previous message (by thread): [Q] ImportError by __import__() on Python >= 3.4
- Next message (by thread): [Q] ImportError by __import__() on Python >= 3.4
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On 2016-06-03 06:48, Makoto Kuwata wrote: > On Fri, Jun 3, 2016 at 9:31 AM, MRAB <python at mrabarnett.plus.com > <mailto:python at mrabarnett.plus.com>> wrote: > > On 2016-06-02 15:04, Makoto Kuwata wrote: > > Hi, > > I have a trouble around __import__(). > The following sample code works well on Python <= 3.3, > but it raises ImportError on Python >= 3.4. > > > ## importtest.py > import sys, os, shutil > > def test(name): > try: > ## create 'foo/__init__.py' file > os.mkdir(name) > with open(name + "/__init__.py", 'w') as f: > f.write("X=1") > f.flush() > ## ipmort 'foo' module > mod = __import__(name) > finally: > if os.path.isdir(name): > shutil.rmtree(name) > > test("foo") # no errors > test("bar") # may raise error on Python >= 3.4. Why? > > > Output Example: > > ### No errors (Python <= 3.3) > ubuntu$ export PYTHONPATH=. > ubuntu$ for x in 1 2 3 ; do /usr/bin/python3.3 > importtest.py; done > > ### ImportError (Python >= 3.4) > ubuntu$ export PYTHONPATH=. > ubuntu$ for x in 1 2 3 ; do /usr/bin/python3.4 > importtest.py; done > Traceback (most recent call last): > File "tmp/importtest.py", line 19, in <module> > test("bar") # may raise error on Python >= 3.4. Why? > File "tmp/importtest.py", line 13, in test > mod = __import__(name) > ImportError: No module named 'bar' > > > Please give me any advices or hints. > Thanks. > > Things to try: > > Does the order matter? If you try "bar" then "foo" does "foo" fail? > > > Yes. Name is not matter. Order is matter. > > > Does the directory matter? > > > No. I created "foo" and "bar" directories in order to create python > module. > > > Is there something called "bar" in the directory already? > > > No. Sample script removes directories every time. > > > What does the created "bar" directory contain? Does it really > contain only "__init__.py"? > > > Yes. See sample script for detail. > > You're testing the script 3 times; on which iteration does it fail? > > > Because sometimes script will fail and sometimes will work file. > It sounds like it's some kind of race condition, e.g. it hasn't finished writing the file before it does the import.
- Previous message (by thread): [Q] ImportError by __import__() on Python >= 3.4
- Next message (by thread): [Q] ImportError by __import__() on Python >= 3.4
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-list mailing list