Python:__ import__在REPL中工作,但不在脚本中

时间:2014-03-07 20:18:46

标签: python module

我在这里很困惑。我有一个目录root,其子目录foo包含文件__init__.py。如果我在root的python REPL中运行以下命令,它可以正常工作:

Python 2.7.5 (default, Aug 25 2013, 00:04:04) 
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.chdir('foo')
>>> print __import__('foo')
<module 'foo' from 'foo/__init__.pyc'>
>>> 

但是,如果我将相同的命令放入脚本root/import_foo.py中,则会失败:

import os
os.chdir('foo')
print __import__('foo')


> python import_foo.py
Traceback (most recent call last):
  File "import_foo.py", line 3, in <module>
    print __import__('foo')
ImportError: No module named foo

为什么会出现差异?我怎么能纠正这个?

1 个答案:

答案 0 :(得分:1)

我被问到很久了,但是我在这个问题上花了一个小时,解决方法是在os.chdir之后的sys.path.append(&#34;。&#34;); < / p>

全文: https://mail.python.org/pipermail/python-bugs-list/2004-June/023835.html

  

在非交互模式的Python 2.3a2中,在os.chdir之后导入   之后,不会在新的当前目录中导入模块   os.chdir。相反,它尝试导入模块(如果存在)   os.chdir之前的当前目录中的名称。如果有   那里不是前一个当前目录中那个名称的模块   是一个ImportError异常。

$ mkdir -p some/dir/with/python/
$ cat > some/dir/with/python/example.py
x = 17
$ cat > import_test.py
import os
cwd = os.getcwd()
os.chdir("some/dir/with/python")        
m = __import__("example")
print(m)
os.chdir(cwd)
$ python3 import_test.py
Traceback (most recent call last):
File "import_test.py", line 4, in <module>
m = __import__("example")
ImportError: No module named 'example'

BUT:

$ python3
Python 3.4.3 (default, Oct 14 2015, 20:28:29) 
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.chdir("some/dir/with/python")
>>> __import__("example")
<module 'example' from '/tmp/some/dir/with/python/example.py'>
>>> 

用&#34;。&#34;在sys.path中:

$ cat > import_test.py
import sys
import os
cwd = os.getcwd()
os.chdir("some/dir/with/python")  
sys.path.append(".")
m = __import__("example")
print(m)
os.chdir(cwd)
$ python3 import_test.py
<module 'example' from './example.py'>
$