On Sat, Jun 4, 2016 at 3:15 AM, MRAB <pyt...@mrabarnett.plus.com> wrote:
> On 2016-06-03 06:48, Makoto Kuwata wrote: > > On Fri, Jun 3, 2016 at 9:31 AM, MRAB <pyt...@mrabarnett.plus.com <mailto: >> pyt...@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. > Maybe. I want to know why it happens on Python >= 3.4 and not on Python <= 3.3. It happens on both Linux (ubuntu 14.04) and MacOSX (El Captain). -- regards, makoto -- https://mail.python.org/mailman/listinfo/python-list