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?

Does the directory matter?

Is there something called "bar" in the directory already?

What does the created "bar" directory contain? Does it really contain only "__init__.py"?

You're testing the script 3 times; on which iteration does it fail?

--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to