Windows上的Python导入错误:没有__path__

时间:2015-07-08 03:30:52

标签: python windows

好的,试着找出运行Python包的问题。

在Windows上运行。

计算机上只安装了一个版本的Python:3.4.3

已安装包(包名:Willie)(安装细节比平时更复杂;如有必要可提供步骤)

软件包安装在:C:\Python34\Lib\site-packages\willie

启动脚本为:C:\Python34\Scripts\willie.py

错误是脚本的第一行:

from willie.tools import stderr

如果我从命令行运行willie.py,我会收到此错误:

Traceback (most recent call last):
  File "<frozen importlib._bootstrap>", line 2218, in _find_and_load_unlocked
AttributeError: 'module' object has no attribute '__path__'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Python34\Scripts\willie.py", line 15, in <module>
    from willie.tools import stderr
  File "C:\Python34\Scripts\willie.py", line 15, in <module>
    from willie.tools import stderr
ImportError: No module named 'willie.tools'; 'willie' is not a package

__path__属性假设在使用import函数时自动设置,但它不存在,导致程序无法运行执行。

C:\Python34\Scripts;位于我的Path环境变量中。

已为从PYTHONPATHC:\Python34;的所有内容设置了{p> C:\Python34;C:\Python34\Lib;C:\Python34\Lib\site-packages;C:\Python34\Lib\site-packages;C:\Python34\Lib\site-packages\willie;C:\Python34\Lib\site-packages\willie\tools;

在这些目录的所有情况下,如果我尝试从交互式Python提示符执行上述导入命令,它将正确运行。我可以使用stderr函数,并检查其__file____path__字段。

但是,如果我将C:\Python34\Scripts;添加到PYTHONPATH,我会收到与在命令行中使用它相同的错误:__path__不存在,&#39; willie& #39;不是一个包。

我知道以某种方式递归调用了willie.py,因为我可以在运行两次的文件顶部添加一个print()。

寻找帮助,找出如何进行此项运行。几乎可以肯定是我的配置问题,但我不知道如何解决它。

1 个答案:

答案 0 :(得分:1)

首先,您绝对不希望c:\Python34\Scripts中有PYTHONPATH\Scripts下的文件不是可导入的。

其次,willie做了一些调整以确保willie.py安装到c:\Python34\Scripts\willie(注意没有.py后缀)。这绝对是非标准的。这甚至可行的唯一原因是因为在Unix机器上,该文件的第一行是一个特殊的“shebang”,告诉Unix程序启动器使用Python执行该文件。 Windows上没有等效功能 - 将文件willie命名为.py表示您根本无法执行它。

因此看起来模块willie根本不准备安装在Windows系统上。 (#811#822都指的是非标准软件包设置导致Windows出现的奇怪现象。)

标准软件包设置willie.py包中的williewillie/main.py,并且在软件包的setup.py中,将willie.main注册为“入口点” “命名为willie。当使用c:\Python34\Scripts\willie.exe安装软件包时,此咒语将在Windows系统上创建pip

我认为递归导入的原因是因为sys.path中的第二个条目是从命令行运行的脚本的名称。因此,当它找到不是它所需的模块C:\Python34\Scripts\willie.py时,它始终会找到willie

作为解决方法,您可以尝试将C:\Python34\Scripts\willie.py重命名为C:\Python34\Scripts\run-willie.py