当前位置: 首页 > 面试题库 >

python作为脚本运行时导入失败,但在iPython中却不行?

施季
2023-03-14
问题内容

我有一个这样的项目结构:

folder1
       |
       folder2
             |
             tests

我在每个文件夹中都有__init__.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 3
docu
)都不同:

(适用于pythonipython

$ 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']
>>>

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

执行脚本文件

$ echo 'import sys' > /tmp/pathtest.py
$ echo 'print(sys.path)' >> /tmp/pathtest.py 
$ python /tmp/pathtest.py 
['/tmp', '/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']

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



 类似资料:
  • 在ipython中 但是在python中: 为什么会发生这个奇怪的错误?请帮我弄清楚。

  • 问题内容: 这在Python 3.3.2 Shell中有效 那很棒!然后,我编写了一个简单的文本文件,名为“ datetime.py” 内部Datetime.py 证明文件存在 这就是它变得神秘的地方! 题 为什么相同的代码在Python Shell中可以工作,而在作为脚本运行时却不能工作? 问题答案: 问题在于文件是递归地导入自身,而不是导入内置模块: 演示: 发生这种情况是因为按以下顺序搜索模

  • 问题内容: 我的用例是我想初始化文件中的某些函数,然后使用定义的那些函数启动ipython。有什么办法可以做 问题答案: 根据文档,这很简单: 使用以下命令启动IPython: 如果不带选项调用,它将执行顺序列出的所有文件,并将您放入解释器,同时仍然确认您可能在文件中设置的任何选项 。此行为与标准Python不同,标准Python在被称为as时只会执行一个文件,而忽略您的配置设置。 所以,只需使用

  • 问题内容: 我很新,很困惑。我用tkinter尝试了一个简单的脚本,它在IDLE中工作正常,但是当我尝试从CMD启动它时- tkinter窗口打开,看起来还不错,但是当您尝试单击任何按钮或文件菜单选项时,就会引发AttributeError: 我很感谢您的任何投入,或者在这里我可以找到有关IDLE和CMD之间差异的更多信息。 问题答案: 人们问起python版本是因为tk.filedialog在2

  • 我正在使用TestNG运行自动Selenium测试。当我作为TestNG套件运行时,一切都很好。但是当我作为Maven Test运行时,它们失败了。我非常困惑为什么他们会在一种情况下工作而不是另一种情况下。以下是测试的总体布局: base.java testbase.java

  • 我第一次安装pymongo时使用的是easy_install,但它不起作用,所以我尝试使用pip,但仍然失败。 这在航站楼很好: 但是在我剧本的第10行 引发以下错误: 文件“test.py”,第10行, 我使用Apache和Python的标准Lion构建。还有其他人经历过吗? 谢谢 编辑:我还应该提到,在安装过程中,它抛出以下错误 然后接着说 非常奇怪。 我的系统。脚本中的路径返回为: ['/库

  • 下面是我在虚拟机中使用的缩短代码。 客户端的连接部分如下: openshift配置如下: openshift中的应用程序日志显示如下: 如有任何协助,我们将不胜感激!

  • 我正在尝试运行我的repo上列出的基本maven java操作:https://github.com/dhowe/rita2/ mvn-B包——文件pom。xmlcmd在本地repo中正确运行,但测试在github操作中失败,并出现以下错误(此处有完整日志): 因此,很明显,通过github操作运行时找不到字典资源。但是为什么maven会在本地找到文件(src/main/java/rita\u d