在不同环境中运行时导入失败

时间:2017-08-24 13:11:15

标签: python

我正在使用一个点子。 目录结构:

scenario
   scenario
     parser
       __init__.py
   __init__.py
   runner.py

父初学

__all__ = ['run_scenario', 'parse_scenario_json', 'play_scenario']

from scenario.runner import run_scenario
from scenario.parser import parse_scenario_json
from scenario.player import play_scenario 
runner.py

中的

# -*- coding: utf-8 -*-

from scenario.parser import parse_scenario_json

从pycharm运行     [![在此处输入图像说明] [1]] [1]

作品。

从终端开始运行

(scenario) /Volumes/Development/scenario (master) python2 scenario/__main__.py -v5 -t 10.0 -f html ../04-04.out ~/Downloads/01-calc-grades-average11.json
Traceback (most recent call last):
  File "scenario/__main__.py", line 10, in <module>
    from scenario.runner import run_scenario
  File "/Users/ohadperry/.virtualenvs/scenario/lib/python2.7/site-packages/scenario/__init__.py", line 3, in <module>
    from scenario.runner import run_scenario
  File "/Users/ohadperry/.virtualenvs/scenario/lib/python2.7/site-packages/scenario/runner.py", line 3, in <module>
    from scenario.parser import parse_scenario_json
ImportError: No module named parse

两者都来自同一个virtualenv和相同的python版本2.7.13

由于这是一个点子,我甚至试图使用已安装的点子

运行
pip install git+https://github.com/shlomihod/scenario.git --upgrade
scenario -v5 -t 10.0 -f html ../../CEC-INGInious-Courses/07-2-C_Programming_2-TEMPLATE/PTBS/04-04.out ~/Downloads/01-calc-grades-average11.json

获得此输出

Traceback (most recent call last):
  File "/Users/ohadperry/.virtualenvs/scenario/bin/scenario", line 9, in <module>
    load_entry_point('scenario==2.0.0', 'console_scripts', 'scenario')()
  File "/Users/ohadperry/.virtualenvs/scenario/lib/python2.7/site-packages/pkg_resources/__init__.py", line 474, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/Users/ohadperry/.virtualenvs/scenario/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2582, in load_entry_point
    return ep.load()
  File "/Users/ohadperry/.virtualenvs/scenario/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2265, in load
    return self._load()
  File "/Users/ohadperry/.virtualenvs/scenario/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2268, in _load
    module = __import__(self.module_name, fromlist=['__name__'], level=0)
  File "/Users/ohadperry/.virtualenvs/scenario/lib/python2.7/site-packages/scenario/__init__.py", line 3, in <module>
    from scenario.runner import run_scenario
  File "/Users/ohadperry/.virtualenvs/scenario/lib/python2.7/site-packages/scenario/runner.py", line 3, in <module>
    from scenario.parser import parse_scenario_json
ImportError: No module named parser

你如何调试这个?

  [1]: https://i.stack.imgur.com/zPAbo.png

3 个答案:

答案 0 :(得分:1)

它可以是Python的版本和lib的版本。如果使用pip安装lib,则必须使用python 2.7,但如果使用pip3安装了库,则必须使用python 3。

检查版本!这种情况已经发生在我身上。

答案 1 :(得分:0)

如果你试图制作python包并安装它,那么包目录结构应该是这样的

funniest/
    funniest/
        __init__.py
        module1.py
        module2.py
        module3.py 
    setup.py

正如你所看到的,父级最有趣的目录是唯一的简单目录,而不是python包。而最有趣的子目录是Python包。

注意:将目录定义为Python包,在目录中定义 init .py

python package

中的详细信息

当你为Python包定义一个目录时,你可以在另一个python模块中导入python目录中定义的所有模块

__all _

的目的

案例1

__ all_在模块中定义

  

在任何Python模块中定义 __ all _ 时,您可以导入   仅在 __ all _

中定义了函数,变量或类

示例:在模块a.py

__all__ = ['var1','method1']

var1 = 10
var2 = 20

def method1():
    pass

def temp1():
    pass

在其他模块中导入a.py时,只能导入 var1 method1 ,无法导入 var2 temp1

因为您没有在 __ all _ 列表中定义

from a import *

print var1    # run without error

method1()     # run without error 

print var2    # show error

temp1()       # show error  

案例2

定义 all_ in __init .py of python package

如果在Python包的__init_.py中定义__all_,则只能导入__all_ list中定义的模块或模块变量

从上面定义目录结构

in chield funniest __init_.py

__all__ = ['module1', 'module2']

现在你可以从最有趣的Python包导入module1和module2,如果你尝试导入module3,它将显示错误。

For more detail __all_ in package

你的案例

 你在__init_.py

中定义__all_
__all__ = ['run_scenario', 'parse_scenario_json', 'play_scenario']

现在您只能导入run_scenario,parse_scenario_json play_scenario

如果您尝试导入另一个模块或模块变量.function,则显示错误

有用的链接:

  1. Link_1

  2. Link_2

答案 2 :(得分:0)

解决方案是安装包文件

to

在那里添加了丢失的包装