我正在学习 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