1

首先让我告诉你,我是一个新用户,我刚开始在大学学习 Python,所以如果这个问题在其他主题中得到回答,我很抱歉,但我搜索了,我似乎找不到它。

我从老师那里收到了一个文件work.pyc,他说我必须使用命令将它导入我的 Wing IDE 中from work import *,问题是我不知道将文件放在哪里才能导入它。

它只是说ImportError: No module named work

谢谢

4

3 回答 3

3

有几种选择。最直接的方法是将它放在与要导入它的 py 文件相同的文件夹中。

您可能还想看看这个

于 2012-10-29T18:11:50.647 回答
2

如果您正在处理main.py文件夹中调用的脚本project,则一种选择是将其放置在project/work.pyc

这将使模块可导入,因为它与您的代码位于同一工作目录中。

Python 解析 import 语句的方式是这样的(简化的):

您正在使用的 Python 解释器(/usr/bin/python2.6例如,您的系统上可能有多个)有一个搜索路径列表,用于查找可导入的代码。这个列表在sys.path里面,你可以通过启动你的解释器并像这样打印出来来查看它:

>>> import sys
>>> from pprint import pprint
>>> pprint(sys.path)

sys.path通常包含来自标准库的模块路径、附加安装的包(通常在站点包中)和可能的其他第 3 方模块。

当您执行类似的操作时import foo,Python 将首先查看在您的脚本所在的目录中是否有一个模块被调用foo.py。如果没有,它将搜索sys.path并尝试从那里导入它。

正如我所说,这个解释有点简化。详细信息在有关模块搜索路径的部分中进行了说明。

注 1:*.pyc你得到的是 编译的Python 字节码。这意味着它的内容是二进制的,它包含由 Python 虚拟机执行的指令,而不是*.py您通常处理的源代码。

注2: 你的老师给你的建议from work import *是相当糟糕的建议。在交互式解释器中出于测试目的这样做可能是可以的,但你不应该实际代码中这样做。相反,你应该做类似的事情from work import chop, hack

主要原因:

  • 命名空间污染。您可能会导入不需要的东西,但仍会污染您的全局命名空间。
  • 可读性。如果您曾经阅读过别人的代码并想知道从哪里来foo,只需向上滚动并查看导入,您就会确切地看到它是从哪里导入的。如果那个人用过import *,你就不能那样做。
于 2012-10-29T18:13:08.467 回答
2

如果您使用的是 python 解释器(让您直接将 python 代码输入其中并执行的解释器),您必须这样做:

sys.path.append('newpath')

from work import *

其中newpath是文件系统上包含 work.pyc 文件的路径

于 2012-10-29T18:15:13.130 回答