首页 > 编程问答 >pyvirtualdisplay: FileNotFoundError: [WinError 2] 系统找不到指定的

pyvirtualdisplay: FileNotFoundError: [WinError 2] 系统找不到指定的

时间:2024-07-22 10:16:15浏览次数:7  
标签:python pyvirtualdisplay

我正在学习 Andrew Ng 的课程,即 2022 机器学习专业。

课程 3 的第三周有一个实验室,其中代码如下:

from pyvirtualdisplay import Display
Display(visible=0, size=(840, 480)).start();

但是当我在 jupyter 中运行单元格时,出现以下错误:

FileNotFoundError                         Traceback (most recent call last)
Input In [2], in <cell line: 2>()
      1 # Set up a virtual display to render the Lunar Lander environment.
----> 2 Display(visible=0, size=(840, 480)).start();
      4 # Set the random seed for TensorFlow
      5 tf.random.set_seed(utils.SEED)

File D:\ProgramData\Anaconda3\envs\ML\lib\site-packages\pyvirtualdisplay\display.py:54, in Display.__init__(self, backend, visible, size, color_depth, bgcolor, use_xauth, retries, extra_args, manage_global_env, **kwargs)
     51 if not cls:
     52     raise ValueError("unknown backend: %s" % self._backend)
---> 54 self._obj = cls(
     55     size=size,
     56     color_depth=color_depth,
     57     bgcolor=bgcolor,
     58     retries=retries,
     59     use_xauth=use_xauth,
     60     # check_startup=check_startup,
     61     extra_args=extra_args,
     62     manage_global_env=manage_global_env,
     63     **kwargs
     64 )

File D:\ProgramData\Anaconda3\envs\ML\lib\site-packages\pyvirtualdisplay\xvfb.py:44, in XvfbDisplay.__init__(self, size, color_depth, bgcolor, use_xauth, fbdir, dpi, retries, extra_args, manage_global_env)
     41 self._fbdir = fbdir
     42 self._dpi = dpi
---> 44 AbstractDisplay.__init__(
     45     self,
     46     PROGRAM,
     47     use_xauth=use_xauth,
     48     retries=retries,
     49     extra_args=extra_args,
     50     manage_global_env=manage_global_env,
     51 )

File D:\ProgramData\Anaconda3\envs\ML\lib\site-packages\pyvirtualdisplay\abstractdisplay.py:85, in AbstractDisplay.__init__(self, program, use_xauth, retries, extra_args, manage_global_env)
     82 self._pipe_wfd = None
     83 self._retries_current = 0
---> 85 helptext = get_helptext(program)
     86 self._has_displayfd = "-displayfd" in helptext
     87 if not self._has_displayfd:

File D:\ProgramData\Anaconda3\envs\ML\lib\site-packages\pyvirtualdisplay\util.py:13, in get_helptext(program)
      6 cmd = [program, "-help"]
      8 # py3.7+
      9 # p = subprocess.run(cmd, capture_output=True)
     10 # stderr = p.stderr
     11 
     12 # py3.6 also
---> 13 p = subprocess.Popen(
     14     cmd,
     15     stdout=subprocess.PIPE,
     16     stderr=subprocess.PIPE,
     17     shell=False,
     18 )
     19 _, stderr = p.communicate()
     21 helptext = stderr.decode("utf-8", "ignore")

File D:\ProgramData\Anaconda3\envs\ML\lib\subprocess.py:858, in Popen.__init__(self, args, bufsize, executable, stdin, stdout, stderr, preexec_fn, close_fds, shell, cwd, env, universal_newlines, startupinfo, creationflags, restore_signals, start_new_session, pass_fds, encoding, errors, text)
    854         if self.text_mode:
    855             self.stderr = io.TextIOWrapper(self.stderr,
    856                     encoding=encoding, errors=errors)
--> 858     self._execute_child(args, executable, preexec_fn, close_fds,
    859                         pass_fds, cwd, env,
    860                         startupinfo, creationflags, shell,
    861                         p2cread, p2cwrite,
    862                         c2pread, c2pwrite,
    863                         errread, errwrite,
    864                         restore_signals, start_new_session)
    865 except:
    866     # Cleanup if the child failed starting.
    867     for f in filter(None, (self.stdin, self.stdout, self.stderr)):

File D:\ProgramData\Anaconda3\envs\ML\lib\subprocess.py:1311, in Popen._execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, unused_restore_signals, unused_start_new_session)
   1309 # Start the process
   1310 try:
-> 1311     hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
   1312                              # no special security
   1313                              None, None,
   1314                              int(not close_fds),
   1315                              creationflags,
   1316                              env,
   1317                              cwd,
   1318                              startupinfo)
   1319 finally:
   1320     # Child is launched. Close the parent's copy of those pipe
   1321     # handles that only the child should have open.  You need
   (...)
   1324     # pipe will not close when the child process exits and the
   1325     # ReadFile will hang.
   1326     self._close_pipe_fds(p2cread, p2cwrite,
   1327                          c2pread, c2pwrite,
   1328                          errread, errwrite)

FileNotFoundError: [WinError 2] The system cannot find the specified.

我了解到可能是“subprocess. init ()”中参数“shell”的值导致了错误,但在我尝试切换“shell”后,它会导致另一个错误' 在 subprocess.py 以及上述错误指出的其他函数中从 False 变为 True,所以我不敢修改这些文件。

任何人都可以解决这个问题吗?请帮我!


看起来你是在Windows机器上运行的,而 pyvirtualdisplay 主要设计用于类Unix系统。它依赖于通常在Windows上不可用的X服务器。

你可以尝试以下解决方案:

1. 使用 WSL(适用于Windows的Linux子系统):

  • WSL 允许你在Windows上运行Linux环境。你可以安装一个Linux发行版,比如Ubuntu,然后在WSL中安装必要的软件包,包括 pyvirtualdisplay 的依赖。

  • 这是运行你的代码的最可靠的解决方案,因为它提供了 pyvirtualdisplay 所期望的原生Linux环境。

2. 使用 Docker:

  • 另一种方法是使用Docker创建一个包含所有必要依赖项的容器。你可以找到预先构建的Docker镜像,其中已经设置好了用于机器学习的必要软件。

  • 这种方法提供了与WSL类似的隔离级别,确保你的主机系统和机器学习环境之间不会发生冲突。

3. 探索替代方案:

  • 如果你不能使用WSL或Docker,你可能需要探索替代 pyvirtualdisplay 的方法。根据你的代码,你可能能够直接在Jupyter Notebook中呈现环境,或者使用不同的库来实现类似的功能。

如果你决定探索替代方案,请提供更多关于你正在尝试实现的目标的信息,以及你在代码中使用 pyvirtualdisplay 的具体原因,这样我才能为你提供更具体的建议。

请记住,在尝试任何这些解决方案之前,安装必要的软件包(例如,在WSL或Docker中)。

以下是在WSL中安装必要软件包的示例:

sudo apt update
sudo apt install python3-pip xvfb
pip3 install pyvirtualdisplay

完成这些步骤后,尝试再次运行你的代码。如果仍然遇到问题,请提供有关你的设置和遇到的任何错误消息的更多信息,以便我进一步帮助你。

标签:python,pyvirtualdisplay
From: 73651910

相关文章

  • Python学习计划——2.4列表推导式(List Comprehensions)
    列表推导式是Python的一种简洁且强大的语法,用于生成新的列表。它可以用更少的代码、更清晰的方式来创建列表,特别是在处理简单的循环和条件操作时。1.基本语法列表推导式的基本语法如下:[expressionforiteminiterable]expression:表达式,计算结果用于生成列表的元素。ite......
  • Python学习计划——2.3常用内置函数(len, max, min, sum, etc.)
    Python提供了许多内置函数,用于简化对数据结构的操作。以下是一些常用的内置函数及其详细说明。1.len()len()函数用于返回对象(如列表、元组、字符串、字典等)的长度(元素个数)。示例:#列表fruits=["apple","banana","cherry"]print(len(fruits))#输出:3#元组c......
  • 哪个 Python 框架可以在 Google Collab 中显示和更改图像?
    我希望能够在使用GoogleCollab时为RL绘制高fps的位图。我现在可以使用OpenCV绘制图像cv2_imshowgoogle替换cv2.imshow但是,它无法替换现有图像,它下面绘制了新的我能够在替换imshow函数中使用一些JavaScript来修复它。但刷新率约为......
  • VSCode 自动建议 python 导入而不依赖 Intellisense
    我正在使用Transformer中的AutoModel之类的对象,并且经常遇到自动导入建议无法找到的对象。我总是希望VSCode建议“从Transformer中执行”,而不是费心寻找它找不到的原因每当看到未定义的“AutoModel”时,都会导入AutoModel”,因此无需扫描任何python导入目录。这......
  • 如何使用Python计算位移自相关函数?
    我正在使用python来分析粒子的异常扩散。我已经得到了粒子轨迹的位移,我想计算并绘制位移自相关与滞后时间t的关系。我认为可能存在使用t和位移(如deltar)的自相关函数的一般函数,但我不能没找到。我可以得到函数或代码吗?可以使用numpy和matplotlib库在Python......
  • 一天一点点,第四天Python基础
    第一天:一天一点点。Python基础-CSDN博客第二天:一天一点点,接上章Python基础-CSDN博客第三天:一天一点点,第三天Python基础(循环语句)-CSDN博客推导式推导式是一种独特的数据处理方式,可以从一个数据序列构建另一个新的数据序列的结构体。推导式是一种强大且简洁的语法,适用于生......
  • Python - for循环不使用正则表达式附加数组
    以下代码从URL获取版本号,然后对于每个版本号,转到该版本号的页面并使用文件名的特定模式填充数组。生成的数组应包含每个版本号的文件名列表,但它似乎只包含早期版本(2.6)。使用print语句,我可以看到代码的工作原理是它获取sha256sums.asc文件-所有这些文件,所有版本。我猜......
  • 使用 callable_iterator (re.finditer) 导致 Python 冻结
    我有一个为文本的每一行调用的函数。deftokenize_line(line:str,cmd=''):matches=re.finditer(Patterns.SUPPORTED_TOKENS,line)tokens_found,not_found,start_idx=[],[],0print(matches)formatchinmatches:pass#Rest......
  • Python 的 time.sleep - 永远不会醒来
    我认为这将是那些简单的问题之一,但它让我感到困惑。[停止媒体:我是对的。找到了解决方案。查看答案。]我正在使用Python的单元测试框架来测试多线程应用程序。很好而且很直接-我有5个左右的工作线程监视一个公共队列,以及一个为它们制作工作项的生产者线程......
  • python中使用mitmproxy的http模块出错
    我有一个使用mitmproxyhttp函数的代码,它在这里惨败:defmain(stdscr):try:parser=argparse.ArgumentParser(description='NetSourNetworkAnalyzer')parser.add_argument('--proxy',action='store_true',help='EnableH......