【问题标题】:Python not finding module, even after path updated and blank __init__.py files created for subdirectories即使在路径更新和为子目录创建空白 __init__.py 文件后,Python 也找不到模块
【发布时间】:2020-09-11 06:12:59
【问题描述】:

我已在虚拟环境 (/home/jamesmcintyre/.local/pipx/venvs/opencv-python) 中安装 OpenCV,并且已将 '/home/jamesmcintyre/.local/pipx/venvs' 添加到我的 sys.path如here所述

我还在 OpenCV-python 的相关子目录中创建了一个名为 __init__.py 的空文本文件,但 import cv2 仍然无法正常工作。

谁能告诉我为什么这不起作用以及如何让模块从非常规目录/子目录中加载?

操作系统:Pop20.04(兼容 Ubuntu 的 Linux)

【问题讨论】:

  • 修改不应该被批准。 Python 帖子应该带有父 python 标签。很多人不会通过放弃它来看到您的问题。你第一次是对的:)
  • 你能解释一下为什么要手动添加路径吗?如果模块安装正确,激活虚拟环境将使其可导入 venv 的 python。您是否激活了虚拟环境?您是否打算将该模块与 另一个 python/虚拟环境一起使用?
  • 我打算在不同的环境中使用它。

标签: python python-3.x linux opencv ubuntu


【解决方案1】:

我已经找到了解决我自己的问题的方法,但我不确定它是否是最好的。

您可以在导入之前更改工作目录,然后再切换回来,而不是更新路径。

这是执行此操作的代码:

def PipxImport(ImportName,*InstallName):
import os

CL = os.getcwd()

FolderName = ImportName

i = 0    
for arg in InstallName:
    if i == 0:
        FolderName = arg
    else:
        break
    i = i + 1

if os.name == 'nt':
    os.chdir(os.path.expanduser("~") + '\\.local\\pipx\\venvs\\' + FolderName + '\\Lib\\site-packages') 
else:
    os.chdir(os.path.expanduser("~") + '/.local/pipx/venvs/' + FolderName + '/lib64/python3.8/site-packages') 

ImportName = __import__(ImportName)

os.chdir(CL)

return ImportName

我还为它创建了一个 repo,它比上面的更可能是最新的,并且还解释了如何使用它等。

https://github.com/FunckyFizz/PipxImport

【讨论】:

  • 请更新您的代码缩进 - 它本身就是一个 SyntaxError。您可能还想看看 PEP 8,特别是惯用命名。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-14
  • 2015-06-13
  • 2017-12-01
  • 1970-01-01
  • 2018-12-21
  • 1970-01-01
相关资源
最近更新 更多