擅长:python、mysql、java
<p>看起来你的问题是对python如何找到模块没有完全的理解。在</p>
<p>对于<a href="https://www.python.org/dev/peps/pep-0328/" rel="nofollow">absolute import</a>(即,您指定第一个模块的名称,如<code>import mymodule</code>,并且不使用句点从代码所属的包进行相对导入,例如<code>from . import mymodule</code>),查找顺序如下:</p>
<ol>
<li>当前目录。在</li>
<li>环境中<code>PYTHONPATH</code>中的任何目录。在</li>
<li>任何已安装的系统路径,可以通过各种方式进行设置。在</li>
</ol>
<p>要查看要从中导入的完整路径集,请使用:</p>
<pre><code>import sys
print(sys.path)
</code></pre>
<p>另外,请记住,目录只有在有<code>__init__.py</code>文件时才是可导入的——您没有在代码中说明是否是这样。在</p>
<p>因此,如果您有以下布局:</p>
^{pr2}$
<p>我希望如果您从基本目录<code>.</code>运行<code>python orangecontrib/prototypes/widgets/owclassificationpythagorastree.py</code>,这两个都可以正常工作,而不需要修改您的<code>PYTHONPATH</code>,因为python总是首先在当前目录中查找绝对导入的模块。在</p>
<p>如果您是从<code>widgets</code>目录运行的,我希望它不会工作,除非您首先将基本目录添加到<code>PYTHONPATH</code>。在</p>
<p>不过,作为一个一般性的提示,除了非常小的事情之外,您应该避免将模块代码与脚本代码混合在一起,正是因为这些原因!创建设计为从命令行运行的单独的python脚本,以及设计为导入的python模块代码。避免生成也可以作为脚本从命令行运行的模块。在</p>