脚本无法导入已安装的包,但解释器可以

时间:2015-08-28 10:49:27

标签: python python-3.x python-import

使用Windows 10和Python 3.4.3,使用Powershell,以及干净的venv:

PS C:\Users\nward\MyEnvDirectory .\Scripts\Activate.ps1
(MyScriptVenv) PS C:\Users\nward\MyEnvDirectory pip install Package
[...] Success!

我可以验证C:\Users\nward\MyEnvDirectory\Lib\site-packages\Package是否存在且看起来不错。

(MyScriptVenv) PS C:\Users\nward\MyEnvDirectory python
Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:44:40) [MSC v.1600 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import Package
>>>

所以,这很有效。但是,如果我尝试运行同一行,例如" import Package"来自同一目录中的.py文件,如下所示 -     (MyScriptEnv) PS C:\Users\nward\MyEnvDirectory .\main.py - 然后我得到ImportError: No module named 'Package'

根据我读过的内容,这通常是由于PATH错误,阴影或混合版本的Python造成的。 python --version提供Python 3.4.3,我不相信我安装了其他任何版本。我不认为这是由于阴影,因为我的脚本文件和包有不同的名称。所以它必须是由于PATH问题,但我不明白它是什么,因为解释器显然没有PATH的问题!这个问题Installed Python script cannot import package modules似乎正是我的问题,但这是由于阴影/目录结构问题。我还读到这可能是一个权限问题(例如提升的解释器,但是执行权限较低的执行shell),但在这种情况下的权限是正常的。

任何人对我接下来要去哪儿都有任何建议?这是一个非常基本的问题,我确定我只是误解了一些事情,但我有点难过。谢谢!

1 个答案:

答案 0 :(得分:1)

似乎在使用 -

在虚拟环境中运行open python交互式解释器时
PS C:\Users\nward\MyEnvDirectory python

您正在从virtualenv获取python安装,但当您以 -

运行脚本时
.\main.py

它正在virtualenv之外拾取python,因为当你直接运行该文件时,windows会选择为.py文件注册的python可执行文件。您可以尝试将脚本作为 -

运行
python main.py

来自virtualenv。