当以脚本形式运行python时导入失败,但不是在iPython中?

当以脚本形式运行python时导入失败,但不是在iPython中?,python,import,path,package,ipython,Python,Import,Path,Package,Ipython,我的项目结构如下: folder1 | folder2 | tests 我在每个文件夹中都有_uinit__u; py.py。当我在folder1的父目录中时,我运行iPython并执行以下操作 from folder1.folder2.tests.test1 import main main() 一切正常。但是当我跑的时候 python folder1/folder2/tests/test1.py 我得到Im

我的项目结构如下:

folder1
       |
       folder2
             |
             tests
我在每个文件夹中都有_uinit__u; py.py。当我在folder1的父目录中时,我运行iPython并执行以下操作

from folder1.folder2.tests.test1 import main
main()
一切正常。但是当我跑的时候

python folder1/folder2/tests/test1.py
我得到ImportError:没有名为folder1.folder2.file1的模块,test1中的import语句是

from folder1.folder2.file1 import class1
对此感到困惑-我猜这是一个路径问题,但我不明白我的代码(其他文件夹中的许多类似设置)有什么问题,以及为什么它仍然在iPython中工作,而不是作为脚本运行的python。

有脚本文件和没有脚本文件时()是不同的:

交互式python解释器 (适用于
python
ipython

请注意,第一个条目是空字符串。空字符串是相当于
的相对路径。模块搜索路径中的相对路径与解释器进程的当前工作目录相对,因此这就是调用解释器的当前工作目录。(在您的案例中,这恰好是您项目的根。)

执行脚本文件
$echo'import sys'>/tmp/pathtest.py
$echo'打印(sys.path)>>/tmp/pathtest.py
$python/tmp/pathtest.py
3/usr/lib/lib/python2.7/plat-Linux22’,,,,,,,,,,,,,,,,,,,,,,,,,/usr/usr/lib/lib/lib/python2.7/lib/tmp/tmp/tmp/tmp/tmp/lib/lib/lib/lib/lib/lib/python2.7/tmp/3.7/tmp/3.7/tmp/tmp/3.7/tmp/tmp/3/3.7/3.7/3.7/tmp/3.7/tmp/3.7/tmp/tmp-2.7/tmp-2.7/3/3.7/3.7/3.7/3.7/3.7/3.7/3/3.7/3.7/lib/3/3/3/3/3/3.7/dist-packages/gst-0.10'、'/usr/lib/python2.7/dist-packages/gtk-2.0'、'/usr/lib/python2.7'、'/usr/lib/python2.7/dist-packages/ubuntu-sso-client'、'/usr/lib/python2.7/dist-packages/ubuntuone-client'、'/usr/lib/python2.7/dist-packages-packages/ubuntuone-packages/ubuntuone控制面板'、'/usr/lib/python2.7/ubuntuon电子安装程序“,”/usr/lib/python2.7/dist-packages/ubuntuone存储协议“]

请注意,这里的第一个条目是包含作为参数传递的脚本文件的目录的绝对路径。

在导入numpy或任何依赖于numpy的库时,我遇到了类似的问题。问题是我的项目文件夹中有一个文件名random.py

Numpy中有random.py作为其随机函数,但导入它会占用我的项目文件夹的random.py

最好的解决方案是不使用任何库的标准模块名命名任何文件


享受……)

我的天啊。。。非常感谢你!我使用了“redmine”这个名称,并尝试导入redmine模块……因此基本上添加了
import sys;sys.path=['']+sys.path
对于您的脚本,也不要尝试使用
sys.path.extend([''])
(就像我做的那样),因为顺序确实会有所不同。
$ python
Python 2.7.3 (default, Dec 18 2014, 19:10:20) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print(sys.path)
['', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-linux2', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PIL', '/usr/lib/pymodules/python2.7/gtk-2.0', '/usr/lib/python2.7/dist-packages/gst-0.10', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.7', '/usr/lib/python2.7/dist-packages/ubuntu-sso-client', '/usr/lib/python2.7/dist-packages/ubuntuone-client', '/usr/lib/python2.7/dist-packages/ubuntuone-control-panel', '/usr/lib/python2.7/dist-packages/ubuntuone-couch', '/usr/lib/python2.7/dist-packages/ubuntuone-installer', '/usr/lib/python2.7/dist-packages/ubuntuone-storage-protocol']
>>>