在 Google Colaboratory 中成功安装 pip 后出现 ModuleNotFoundError

sjp*_*ral 5 python pip google-colaboratory

我正在尝试将我编写的包导入 Google Colaboratory 笔记本中。我将包内容上传到我的云端硬盘,然后运行:

[ ] from google.colab import drive
[ ] drive.mount('content/gdrive/')
[ ] ! pip install --user /content/gdrive/My\ Drive/my-package
Processing ./gdrive/My Drive/my-package
Building wheels for collected packages: my-package
  Building wheel for my-package (setup.py) ... done
  Created wheel for my-package: 
  Stored in directory: 
Successfully built my-package
Installing collected packages: my-package
Successfully installed my-package-1.0.0.dev1
Run Code Online (Sandbox Code Playgroud)

pip list显示软件包已成功安装。但是,包的导入失败并带有ModuleNotFoundError.

我已在本地计算机上成功安装并导入了 my-package 。我还使用 .com 通过同一个 Colab 笔记本成功安装并导入了另一个 Python 包pip install --user。正如这里提到的,我还尝试过重新启动内核。

这可能与这个相关但未回答的问题有关。

小智 7

在我看来,您链接到的有关重新启动运行时的 github 页面有点含糊,所以我只是想澄清一下:

您需要运行该!pip install单元。然后“重新启动运行时”。然后运行您的import语句单元格。

我可能建议您在执行这些步骤之前“重置所有运行时”,以确保您有一个干净的状态。

-- 如果您已经执行了上述步骤:您使用的Python 2 还是 3 笔记本?(不是 100% 确定为什么这很重要,但更多信息会更好)

您是否pip install从谷歌驱动器链接到您的本地计算机?(如果没有,请尝试看看是否有效并报告)


sve*_*ser 6

可编辑的安装(或setuptoolsdevelopment-mode)将模块路径附加到easy-install.pth文件中。该site模块在 python 启动时处理这些文件并将路径附加到sys.path. 这就是为什么它只有在重新启动运行时后才起作用。

site人们可以通过导入模块并(重新)运行来避免重新启动 Colab 笔记本site.main()

%pip install -e pkg
import site
site.main()
import pkg
Run Code Online (Sandbox Code Playgroud)

但是,在下面的示例中,这会删除当前目录sys.path并将其替换为其绝对路径。

%pip install -e "git+https://github.com/jd/tenacity#egg=tenacity"

print("\nTrying to import tenacity")
try:
    import tenacity
except ImportError as exc:
    print("ImportError")
    print(exc)
    print()

import sys, site

print("\n##### sys.path original #####")
for p in sys.path:
    print(f"'{p}'")
print()

site.main()

print("\n##### sys.path after site.main() #####")
for p in sys.path:
    print(f"'{p}'")
print()

import tenacity
print(f"\nImported tenacity from {tenacity.__file__}")
Run Code Online (Sandbox Code Playgroud)

印刷

Obtaining tenacity from git+https://github.com/jd/tenacity#egg=tenacity
  Cloning https://github.com/jd/tenacity to ./src/tenacity
  Running command git clone -q https://github.com/jd/tenacity /content/src/tenacity
Requirement already satisfied: six>=1.9.0 in /usr/local/lib/python3.6/dist-packages (from tenacity) (1.15.0)
Installing collected packages: tenacity
  Running setup.py develop for tenacity
Successfully installed tenacity

Trying to import tenacity
ImportError
No module named 'tenacity'


##### sys.path original #####
''
'/env/python'
'/usr/lib/python36.zip'
'/usr/lib/python3.6'
'/usr/lib/python3.6/lib-dynload'
'/usr/local/lib/python3.6/dist-packages'
'/usr/lib/python3/dist-packages'
'/usr/local/lib/python3.6/dist-packages/IPython/extensions'
'/root/.ipython'


##### sys.path after site.main() #####
'/content'
'/env/python'
'/usr/lib/python36.zip'
'/usr/lib/python3.6'
'/usr/lib/python3.6/lib-dynload'
'/usr/local/lib/python3.6/dist-packages'
'/usr/lib/python3/dist-packages'
'/usr/local/lib/python3.6/dist-packages/IPython/extensions'
'/root/.ipython'
'/content/src/tenacity'


Imported tenacity from /content/src/tenacity/tenacity/__init__.py
Run Code Online (Sandbox Code Playgroud)

Colab 笔记本示例:https://colab.research.google.com/drive/1S5EU-MirhaTWz1JJVdos3GcojmOSLC1C ?usp=sharing

通过博客文章偶然发现了这一点: https: //yidatao.github.io/2016-05-10/Python-easyinstall-generates-pth-file/


sjp*_*ral 1

感谢 @jojo 的建议,我在本地计算机上卸载并重新安装了该软件包,并能够诊断问题。在我的本地计算机和 Colab 中,仅当在命令 ( ) 中包含-e(可编辑)标志并在安装后重新启动运行时时,我才能成功安装和导入包。我不知道为什么包括国旗会有所作为;如果您有什么见解请评论!pippip install --user -e /content/gdrive/My\ Drive/my-package-e