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.
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to