【问题标题】:Python script inside virtual env not running in command line虚拟环境中的 Python 脚本未在命令行中运行
【发布时间】:2021-10-08 17:27:26
【问题描述】:

一旦激活虚拟环境 ((venv) pi@raspberrypi:~/test $ python3 openCV_motion_detection_cam1.py ),使用 cv2 的 python 脚本就可以从命令行正常运行。但是当从普通命令行 (pi@raspberrypi:~/test $ python3 openCV_motion_detection_cam1.py ) 运行时,它会输出错误 - “No module named 'cv2'”,它已经在 /home/pi/test/venv/lib/python3.7/site-packages.I我是新手,希望您的 cmets 对“菜鸟”友好。请帮忙。

【问题讨论】:

  • 这就是虚拟环境的概念:你激活它们来工作。
  • 您的脚本运行良好,那么您需要什么帮助?

标签: python


【解决方案1】:

如果您想直接在虚拟环境中运行脚本,请编辑 shebang 行以包含来自该环境的 Python 解释器:

#!/path/to/env/bin/python3

该解释器将在其父目录中找到pyvenv.cfg 文件,并将相应地调整所有路径。这相当于激活环境。


该过程可以自动化。使用setup.py 创建一个包并声明哪些文件是脚本。安装包后,脚本将安装在 <venv>/bin 子目录中,并带有正确的 shebang 行。

您可能希望从 /usr/bin 创建一个符号链接,以便在路径中包含脚本。

【讨论】:

  • 这是我使用'#!/home/pi/test/venv/bin/python3'的shebang行,但没有运气。关于创建包和符号链接,我仍然需要谷歌如何。谢谢
  • @technocraze 这很奇怪,shebang 线被证明是有效的。我也在用它。详情在这里:docs.python.org/3/library/site.html段落中:如果存在名为“pyvenv.cfg”的文件...(其余无需阅读)
  • @technocraze 你如何开始你的脚本?您必须使其可执行 (chmod 755 ...) 并直接运行 /path/to/script,而不是使用 python3 /path/to/script,否则 shell 不会评估 shebang 行。
  • 我使脚本可执行并且成功了,脚本现在从命令行运行良好!实际上我已经尝试使脚本可执行但没有成功,我认为当时的 shebang 行不正确。非常感谢VPfB。感谢大家的时间和努力。
【解决方案2】:

存在虚拟环境以将各个 python 程序所需的模块相互隔离。当您安装 cv2 时,您将其安装在当前活动的 venv 中。当 venv 不活动时,它的模块将不可用。简单的解决方案是在 venv 中运行您的程序。

您可以通过模块路径的/venv/lib/python37/site-packages 部分判断该模块存在于 venv 中。

【讨论】:

  • 感谢您的回复。一旦激活,该脚本就会在 venv 中运行。我需要在启动时启动这个脚本,因此想要添加到 crontab 或 rc。当地的。为了实现这一点,我认为脚本应该从命令提示符运行。你能告诉我如何判断模块存在的位置吗?我是新手,在定义路径等方面知识非常有限。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-05
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 2023-03-31
相关资源
最近更新 更多