脚本无法导入已安装的包,但解释器可以
Script cannot import installed package, but interpreter can
使用 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'
。
根据我的阅读,这通常是由于 Python 的 PATH 错误、隐藏或混合版本所致。 python --version
给出 Python 3.4.3
,我相信我没有安装任何其他版本。我不认为这是由于阴影造成的,因为我的脚本文件和包具有不同的名称。所以这一定是由于 PATH 问题,但我不明白它是什么,因为解释器显然没有 PATH 问题!这个问题 Installed Python script cannot import package modules 似乎正是我的问题,但这是由于 shadowing/directory 结构问题。我还读到这可能是一个权限问题(例如,提升的解释器但低权限执行 shell),但在这种情况下权限是可以的。
有人对我接下来应该去哪里有什么建议吗?这是一个非常基本的问题,我确定我只是误解了一些东西,但我有点难过。谢谢!
似乎当您 运行 在虚拟环境中使用 -
打开 python 交互式解释器时
PS C:\Users\nward\MyEnvDirectory python
您正在从 virtualenv 获取 python 安装,但是当您 运行 您的脚本为 -
.\main.py
它在 virtualenv 外部获取 python,因为当您直接 运行 文件时,windows 获取为 [注册的 python 可执行文件=13=] 文件。您可以尝试 运行 将脚本设置为 -
python main.py
从 virtualenv 内部。
使用 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'
。
根据我的阅读,这通常是由于 Python 的 PATH 错误、隐藏或混合版本所致。 python --version
给出 Python 3.4.3
,我相信我没有安装任何其他版本。我不认为这是由于阴影造成的,因为我的脚本文件和包具有不同的名称。所以这一定是由于 PATH 问题,但我不明白它是什么,因为解释器显然没有 PATH 问题!这个问题 Installed Python script cannot import package modules 似乎正是我的问题,但这是由于 shadowing/directory 结构问题。我还读到这可能是一个权限问题(例如,提升的解释器但低权限执行 shell),但在这种情况下权限是可以的。
有人对我接下来应该去哪里有什么建议吗?这是一个非常基本的问题,我确定我只是误解了一些东西,但我有点难过。谢谢!
似乎当您 运行 在虚拟环境中使用 -
打开 python 交互式解释器时PS C:\Users\nward\MyEnvDirectory python
您正在从 virtualenv 获取 python 安装,但是当您 运行 您的脚本为 -
.\main.py
它在 virtualenv 外部获取 python,因为当您直接 运行 文件时,windows 获取为 [注册的 python 可执行文件=13=] 文件。您可以尝试 运行 将脚本设置为 -
python main.py
从 virtualenv 内部。