Timeout error when trying image search from CLI or Python
drscotthawley opened this issue · comments
Describe the bug
"TimeoutError: timed out" coming from the attempt at an http socket connection. This happens whether calling from Python or using the DDG CLI. Running pip install -U duckduckgo_search
does not fix this.
Debug log
CLI version, using the suggested search from the README:
$ ddgs images -k "yuri kuklachev cat theatre" -m 500 -s off -d
Traceback (most recent call last):
File "/Users/myusername/envs/blog/lib/python3.11/site-packages/httpcore/_exceptions.py", line 10, in map_exceptions
yield
File "/Users/myusername/envs/blog/lib/python3.11/site-packages/httpcore/_backends/sync.py", line 206, in connect_tcp
sock = socket.create_connection(
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/homebrew/Cellar/python@3.11/3.11.4_1/Frameworks/Python.framework/Versions/3.11/lib/python3.11/socket.py", line 851, in create_connection
raise exceptions[0]
File "/opt/homebrew/Cellar/python@3.11/3.11.4_1/Frameworks/Python.framework/Versions/3.11/lib/python3.11/socket.py", line 836, in create_connection
sock.connect(sa)
TimeoutError: timed out
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/Users/myusername/envs/blog/lib/python3.11/site-packages/httpx/_transports/default.py", line 66, in map_httpcore_exceptions
yield
File "/Users/myusername/envs/blog/lib/python3.11/site-packages/httpx/_transports/default.py", line 228, in handle_request
resp = self._pool.handle_request(req)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/myusername/envs/blog/lib/python3.11/site-packages/httpcore/_sync/connection_pool.py", line 268, in handle_request
raise exc
File "/Users/myusername/envs/blog/lib/python3.11/site-packages/httpcore/_sync/connection_pool.py", line 251, in handle_request
response = connection.handle_request(request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/myusername/envs/blog/lib/python3.11/site-packages/httpcore/_sync/connection.py", line 99, in handle_request
raise exc
File "/Users/myusername/envs/blog/lib/python3.11/site-packages/httpcore/_sync/connection.py", line 76, in handle_request
stream = self._connect(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/Users/myusername/envs/blog/lib/python3.11/site-packages/httpcore/_sync/connection.py", line 124, in _connect
stream = self._network_backend.connect_tcp(**kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/myusername/envs/blog/lib/python3.11/site-packages/httpcore/_backends/sync.py", line 205, in connect_tcp
with map_exceptions(exc_map):
File "/opt/homebrew/Cellar/python@3.11/3.11.4_1/Frameworks/Python.framework/Versions/3.11/lib/python3.11/contextlib.py", line 155, in __exit__
self.gen.throw(typ, value, traceback)
File "/Users/myusername/envs/blog/lib/python3.11/site-packages/httpcore/_exceptions.py", line 14, in map_exceptions
raise to_exc(exc) from exc
httpcore.ConnectTimeout: timed out
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/Users/myusername/envs/blog/bin/ddgs", line 8, in <module>
sys.exit(cli())
^^^^^
File "/Users/myusername/envs/blog/lib/python3.11/site-packages/click/core.py", line 1157, in __call__
return self.main(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/myusername/envs/blog/lib/python3.11/site-packages/click/core.py", line 1078, in main
rv = self.invoke(ctx)
^^^^^^^^^^^^^^^^
File "/Users/myusername/envs/blog/lib/python3.11/site-packages/click/core.py", line 1719, in invoke
rv.append(sub_ctx.command.invoke(sub_ctx))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/myusername/envs/blog/lib/python3.11/site-packages/click/core.py", line 1434, in invoke
return ctx.invoke(self.callback, **ctx.params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/myusername/envs/blog/lib/python3.11/site-packages/click/core.py", line 783, in invoke
return __callback(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/myusername/envs/blog/lib/python3.11/site-packages/duckduckgo_search/cli.py", line 249, in images
for r in DDGS(proxies=proxy).images(
File "/Users/myusername/envs/blog/lib/python3.11/site-packages/duckduckgo_search/duckduckgo_search.py", line 351, in images
vqd = self._get_vqd(keywords)
^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/myusername/envs/blog/lib/python3.11/site-packages/duckduckgo_search/duckduckgo_search.py", line 59, in _get_vqd
resp = self._get_url("POST", "https://duckduckgo.com", data={"q": keywords})
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/myusername/envs/blog/lib/python3.11/site-packages/duckduckgo_search/duckduckgo_search.py", line 54, in _get_url
raise ex
File "/Users/myusername/envs/blog/lib/python3.11/site-packages/duckduckgo_search/duckduckgo_search.py", line 45, in _get_url
resp = self._client.request(method, url, follow_redirects=True, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/myusername/envs/blog/lib/python3.11/site-packages/httpx/_client.py", line 814, in request
return self.send(request, auth=auth, follow_redirects=follow_redirects)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/myusername/envs/blog/lib/python3.11/site-packages/httpx/_client.py", line 901, in send
response = self._send_handling_auth(
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/myusername/envs/blog/lib/python3.11/site-packages/httpx/_client.py", line 929, in _send_handling_auth
response = self._send_handling_redirects(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/myusername/envs/blog/lib/python3.11/site-packages/httpx/_client.py", line 966, in _send_handling_redirects
response = self._send_single_request(request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/myusername/envs/blog/lib/python3.11/site-packages/httpx/_client.py", line 1002, in _send_single_request
response = transport.handle_request(request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/myusername/envs/blog/lib/python3.11/site-packages/httpx/_transports/default.py", line 227, in handle_request
with map_httpcore_exceptions():
File "/opt/homebrew/Cellar/python@3.11/3.11.4_1/Frameworks/Python.framework/Versions/3.11/lib/python3.11/contextlib.py", line 155, in __exit__
self.gen.throw(typ, value, traceback)
File "/Users/myusername/envs/blog/lib/python3.11/site-packages/httpx/_transports/default.py", line 83, in map_httpcore_exceptions
raise mapped_exc(message) from exc
httpx.ConnectTimeout: timed out
Python version: search_results = ddgs.images(keywords="dog images")
:
---------------------------------------------------------------------------
TimeoutError Traceback (most recent call last)
File ~/envs/blog/lib/python3.11/site-packages/httpcore/_exceptions.py:10, in map_exceptions(map)
9 try:
---> 10 yield
11 except Exception as exc: # noqa: PIE786
File ~/envs/blog/lib/python3.11/site-packages/httpcore/_backends/sync.py:206, in SyncBackend.connect_tcp(self, host, port, timeout, local_address, socket_options)
205 with map_exceptions(exc_map):
--> 206 sock = socket.create_connection(
207 address,
208 timeout,
209 source_address=source_address,
210 )
211 for option in socket_options:
File /opt/homebrew/Cellar/python@3.11/3.11.4_1/Frameworks/Python.framework/Versions/3.11/lib/python3.11/socket.py:851, in create_connection(address, timeout, source_address, all_errors)
850 if not all_errors:
--> 851 raise exceptions[0]
852 raise ExceptionGroup("create_connection failed", exceptions)
File /opt/homebrew/Cellar/python@3.11/3.11.4_1/Frameworks/Python.framework/Versions/3.11/lib/python3.11/socket.py:836, in create_connection(address, timeout, source_address, all_errors)
835 sock.bind(source_address)
--> 836 sock.connect(sa)
837 # Break explicitly a reference cycle
TimeoutError: timed out
The above exception was the direct cause of the following exception:
ConnectTimeout Traceback (most recent call last)
File ~/envs/blog/lib/python3.11/site-packages/httpx/_transports/default.py:66, in map_httpcore_exceptions()
65 try:
---> 66 yield
67 except Exception as exc:
File ~/envs/blog/lib/python3.11/site-packages/httpx/_transports/default.py:228, in HTTPTransport.handle_request(self, request)
227 with map_httpcore_exceptions():
--> 228 resp = self._pool.handle_request(req)
230 assert isinstance(resp.stream, typing.Iterable)
File ~/envs/blog/lib/python3.11/site-packages/httpcore/_sync/connection_pool.py:268, in ConnectionPool.handle_request(self, request)
267 self.response_closed(status)
--> 268 raise exc
269 else:
File ~/envs/blog/lib/python3.11/site-packages/httpcore/_sync/connection_pool.py:251, in ConnectionPool.handle_request(self, request)
250 try:
--> 251 response = connection.handle_request(request)
252 except ConnectionNotAvailable:
253 # The ConnectionNotAvailable exception is a special case, that
254 # indicates we need to retry the request on a new connection.
(...)
258 # might end up as an HTTP/2 connection, but which actually ends
259 # up as HTTP/1.1.
File ~/envs/blog/lib/python3.11/site-packages/httpcore/_sync/connection.py:99, in HTTPConnection.handle_request(self, request)
98 self._connect_failed = True
---> 99 raise exc
100 elif not self._connection.is_available():
File ~/envs/blog/lib/python3.11/site-packages/httpcore/_sync/connection.py:76, in HTTPConnection.handle_request(self, request)
75 try:
---> 76 stream = self._connect(request)
78 ssl_object = stream.get_extra_info("ssl_object")
File ~/envs/blog/lib/python3.11/site-packages/httpcore/_sync/connection.py:124, in HTTPConnection._connect(self, request)
123 with Trace("connect_tcp", logger, request, kwargs) as trace:
--> 124 stream = self._network_backend.connect_tcp(**kwargs)
125 trace.return_value = stream
File ~/envs/blog/lib/python3.11/site-packages/httpcore/_backends/sync.py:205, in SyncBackend.connect_tcp(self, host, port, timeout, local_address, socket_options)
200 exc_map: ExceptionMapping = {
201 socket.timeout: ConnectTimeout,
202 OSError: ConnectError,
203 }
--> 205 with map_exceptions(exc_map):
206 sock = socket.create_connection(
207 address,
208 timeout,
209 source_address=source_address,
210 )
File /opt/homebrew/Cellar/python@3.11/3.11.4_1/Frameworks/Python.framework/Versions/3.11/lib/python3.11/contextlib.py:155, in _GeneratorContextManager.__exit__(self, typ, value, traceback)
154 try:
--> 155 self.gen.throw(typ, value, traceback)
156 except StopIteration as exc:
157 # Suppress StopIteration *unless* it's the same exception that
158 # was passed to throw(). This prevents a StopIteration
159 # raised inside the "with" statement from being suppressed.
File ~/envs/blog/lib/python3.11/site-packages/httpcore/_exceptions.py:14, in map_exceptions(map)
13 if isinstance(exc, from_exc):
---> 14 raise to_exc(exc) from exc
15 raise
ConnectTimeout: timed out
The above exception was the direct cause of the following exception:
ConnectTimeout Traceback (most recent call last)
Cell In[17], line 15
12 return image_urls
14 # example usage:
---> 15 urls = search_images("dog images", max_images=10)
16 urls
Cell In[17], line 10, in search_images(term, max_images)
6 with DDGS() as ddgs:
7 # generator which yields dicts with:
8 # {'title','image','thumbnail','url','height','width','source'}
9 search_results = ddgs.images(keywords=term) # returns a generator
---> 10 image_urls = [next(search_results).get("image") for _ in range(max_images)]
11 # convert to L (functionally extended list class from fastai)
12 return image_urls
Cell In[17], line 10, in <listcomp>(.0)
6 with DDGS() as ddgs:
7 # generator which yields dicts with:
8 # {'title','image','thumbnail','url','height','width','source'}
9 search_results = ddgs.images(keywords=term) # returns a generator
---> 10 image_urls = [next(search_results).get("image") for _ in range(max_images)]
11 # convert to L (functionally extended list class from fastai)
12 return image_urls
File ~/envs/blog/lib/python3.11/site-packages/duckduckgo_search/duckduckgo_search.py:351, in DDGS.images(self, keywords, region, safesearch, timelimit, size, color, type_image, layout, license_image, max_results)
326 """DuckDuckGo images search. Query params: https://duckduckgo.com/params
327
328 Args:
(...)
347
348 """
349 assert keywords, "keywords is mandatory"
--> 351 vqd = self._get_vqd(keywords)
352 assert vqd, "error in getting vqd"
354 safesearch_base = {"on": 1, "moderate": 1, "off": -1}
File ~/envs/blog/lib/python3.11/site-packages/duckduckgo_search/duckduckgo_search.py:59, in DDGS._get_vqd(self, keywords)
57 def _get_vqd(self, keywords: str) -> Optional[str]:
58 """Get vqd value for a search query."""
---> 59 resp = self._get_url("POST", "https://duckduckgo.com/", data={"q": keywords})
60 if resp:
61 return _extract_vqd(resp.content)
File ~/envs/blog/lib/python3.11/site-packages/duckduckgo_search/duckduckgo_search.py:54, in DDGS._get_url(self, method, url, **kwargs)
52 logger.warning(f"_get_url() {url} {type(ex).__name__} {ex}")
53 if i >= 2 or "418" in str(ex):
---> 54 raise ex
55 sleep(3)
File ~/envs/blog/lib/python3.11/site-packages/duckduckgo_search/duckduckgo_search.py:45, in DDGS._get_url(self, method, url, **kwargs)
43 for i in range(3):
44 try:
---> 45 resp = self._client.request(method, url, follow_redirects=True, **kwargs)
46 if _is_500_in_url(str(resp.url)) or resp.status_code == 202:
47 raise httpx._exceptions.HTTPError("")
File ~/envs/blog/lib/python3.11/site-packages/httpx/_client.py:814, in Client.request(self, method, url, content, data, files, json, params, headers, cookies, auth, follow_redirects, timeout, extensions)
799 warnings.warn(message, DeprecationWarning)
801 request = self.build_request(
802 method=method,
803 url=url,
(...)
812 extensions=extensions,
813 )
--> 814 return self.send(request, auth=auth, follow_redirects=follow_redirects)
File ~/envs/blog/lib/python3.11/site-packages/httpx/_client.py:901, in Client.send(self, request, stream, auth, follow_redirects)
893 follow_redirects = (
894 self.follow_redirects
895 if isinstance(follow_redirects, UseClientDefault)
896 else follow_redirects
897 )
899 auth = self._build_request_auth(request, auth)
--> 901 response = self._send_handling_auth(
902 request,
903 auth=auth,
904 follow_redirects=follow_redirects,
905 history=[],
906 )
907 try:
908 if not stream:
File ~/envs/blog/lib/python3.11/site-packages/httpx/_client.py:929, in Client._send_handling_auth(self, request, auth, follow_redirects, history)
926 request = next(auth_flow)
928 while True:
--> 929 response = self._send_handling_redirects(
930 request,
931 follow_redirects=follow_redirects,
932 history=history,
933 )
934 try:
935 try:
File ~/envs/blog/lib/python3.11/site-packages/httpx/_client.py:966, in Client._send_handling_redirects(self, request, follow_redirects, history)
963 for hook in self._event_hooks["request"]:
964 hook(request)
--> 966 response = self._send_single_request(request)
967 try:
968 for hook in self._event_hooks["response"]:
File ~/envs/blog/lib/python3.11/site-packages/httpx/_client.py:1002, in Client._send_single_request(self, request)
997 raise RuntimeError(
998 "Attempted to send an async request with a sync Client instance."
999 )
1001 with request_context(request=request):
-> 1002 response = transport.handle_request(request)
1004 assert isinstance(response.stream, SyncByteStream)
1006 response.request = request
File ~/envs/blog/lib/python3.11/site-packages/httpx/_transports/default.py:227, in HTTPTransport.handle_request(self, request)
213 assert isinstance(request.stream, SyncByteStream)
215 req = httpcore.Request(
216 method=request.method,
217 url=httpcore.URL(
(...)
225 extensions=request.extensions,
226 )
--> 227 with map_httpcore_exceptions():
228 resp = self._pool.handle_request(req)
230 assert isinstance(resp.stream, typing.Iterable)
File /opt/homebrew/Cellar/python@3.11/3.11.4_1/Frameworks/Python.framework/Versions/3.11/lib/python3.11/contextlib.py:155, in _GeneratorContextManager.__exit__(self, typ, value, traceback)
153 value = typ()
154 try:
--> 155 self.gen.throw(typ, value, traceback)
156 except StopIteration as exc:
157 # Suppress StopIteration *unless* it's the same exception that
158 # was passed to throw(). This prevents a StopIteration
159 # raised inside the "with" statement from being suppressed.
160 return exc is not value
File ~/envs/blog/lib/python3.11/site-packages/httpx/_transports/default.py:83, in map_httpcore_exceptions()
80 raise
82 message = str(exc)
---> 83 raise mapped_exc(message) from exc
ConnectTimeout: timed out
Specify this information
- OS: MacOS 13.4.1
- environment
$ pip list
Package Version
--------------------------------- ---------
absl-py 1.4.0
accelerate 0.20.3
aeiou 0.0.20
aiofiles 23.2.1
annotated-types 0.6.0
anyio 3.7.1
appdirs 1.4.4
appnope 0.1.3
argon2-cffi 21.3.0
argon2-cffi-bindings 21.2.0
arrow 1.2.3
asttokens 2.2.1
astunparse 1.6.3
async-lru 2.0.4
attrs 23.1.0
audioread 3.0.0
Babel 2.12.1
backcall 0.2.0
beautifulsoup4 4.12.2
black 23.7.0
bleach 6.0.0
blis 0.7.11
bokeh 3.1.1
braceexpand 0.1.7
Brotli 1.1.0
cachetools 5.3.1
catalogue 2.0.10
certifi 2023.5.7
cffi 1.15.1
charset-normalizer 3.1.0
click 8.1.7
cloudpathlib 0.16.0
colorcet 3.0.1
comm 0.1.3
confection 0.1.3
contourpy 1.0.7
cycler 0.11.0
cymem 2.0.8
debugpy 1.6.7
decorator 5.1.1
defusedxml 0.7.1
docker-pycreds 0.4.0
duckduckgo-search 3.9.4
einops 0.6.1
entrypoints 0.4
execnb 0.1.5
executing 1.2.0
fastai 2.7.13
fastcore 1.5.29
fastdownload 0.0.7
fastjsonschema 2.17.1
fastprogress 1.0.3
filelock 3.12.1
flatbuffers 23.5.26
fonttools 4.39.4
fqdn 1.5.1
gast 0.4.0
ghapi 1.0.3
gitdb 4.0.10
GitPython 3.1.31
google-auth 2.19.1
google-auth-oauthlib 1.0.0
google-pasta 0.2.0
grpcio 1.54.2
h11 0.14.0
h2 4.1.0
h5py 3.8.0
holoviews 1.16.2
hpack 4.0.0
httpcore 1.0.1
httpx 0.25.1
hyperframe 6.0.1
idna 3.4
ipyflow 0.0.178
ipyflow-core 0.0.178
ipykernel 6.23.1
ipython 8.14.0
ipython-genutils 0.2.0
ipywidgets 8.1.0
isoduration 20.11.0
jedi 0.18.2
Jinja2 3.1.2
joblib 1.2.0
json5 0.9.14
jsonpointer 2.4
jsonschema 4.19.0
jsonschema-specifications 2023.7.1
jupyter 1.0.0
jupyter_client 8.3.0
jupyter-console 6.6.3
jupyter-contrib-core 0.4.2
jupyter_core 5.3.0
jupyter-events 0.7.0
jupyter-lsp 2.2.0
jupyter-nbextensions-configurator 0.6.3
jupyter_server 2.7.0
jupyter_server_terminals 0.4.4
jupyterlab 4.0.4
jupyterlab-pygments 0.2.2
jupyterlab_rise 0.40.0
jupyterlab_server 2.24.0
jupyterlab-widgets 3.0.8
keras 2.13.1rc0
kiwisolver 1.4.4
langcodes 3.3.0
libclang 16.0.0
librosa 0.9.2
linkify-it-py 2.0.2
llvmlite 0.40.1rc1
lxml 4.9.3
Markdown 3.4.3
markdown-it-py 2.2.0
MarkupSafe 2.1.3
matplotlib 3.7.1
matplotlib-inline 0.1.6
mdit-py-plugins 0.4.0
mdurl 0.1.2
mistune 3.0.1
mpmath 1.3.0
mrspuff 0.0.32
murmurhash 1.0.10
mypy-extensions 1.0.0
nbclassic 1.0.0
nbclient 0.8.0
nbconvert 7.7.3
nbdev 2.3.12
nbformat 5.9.0
nest-asyncio 1.5.6
networkx 3.1
notebook 7.0.2
notebook_shim 0.2.3
numba 0.57.0
numpy 1.24.3
oauthlib 3.2.2
opt-einsum 3.3.0
overrides 7.4.0
packaging 23.1
pandas 2.0.2
pandocfilters 1.5.0
panel 1.1.0
param 1.13.0
parso 0.8.3
pathspec 0.11.2
pathtools 0.1.2
pedalboard 0.7.3
pexpect 4.8.0
pickleshare 0.7.5
Pillow 9.5.0
pip 23.2.1
platformdirs 3.5.3
plotly 5.15.0
pooch 1.7.0
preshed 3.0.9
prometheus-client 0.17.1
prompt-toolkit 3.0.38
protobuf 4.23.2
psutil 5.9.5
ptyprocess 0.7.0
pure-eval 0.2.2
pyasn1 0.5.0
pyasn1-modules 0.3.0
pyccolo 0.0.48
pycparser 2.21
pyct 0.5.0
pydantic 2.4.2
pydantic_core 2.10.1
Pygments 2.15.1
pynndescent 0.5.10
pyparsing 3.0.9
pyrsistent 0.19.3
python-dateutil 2.8.2
python-json-logger 2.0.7
pytz 2023.3
pyviz-comms 2.3.1
PyYAML 6.0
pyzmq 24.0.1
qtconsole 5.4.3
QtPy 2.3.1
quarto 0.1.0
referencing 0.30.2
requests 2.31.0
requests-oauthlib 1.3.1
resampy 0.4.2
rfc3339-validator 0.1.4
rfc3986-validator 0.1.1
rise 5.7.1
rpds-py 0.9.2
rsa 4.9
scikit-learn 1.2.2
scipy 1.10.1
Send2Trash 1.8.2
sentry-sdk 1.25.1
setproctitle 1.3.2
setuptools 67.6.1
six 1.16.0
smart-open 6.4.0
smmap 5.0.0
sniffio 1.3.0
socksio 1.0.0
SoundFile 0.10.2
soupsieve 2.4.1
spacy 3.7.2
spacy-legacy 3.0.12
spacy-loggers 1.0.5
srsly 2.4.8
stack-data 0.6.2
sympy 1.12
tenacity 8.2.2
tensorboard 2.13.0
tensorboard-data-server 0.7.0
tensorflow 2.13.0rc1
tensorflow-estimator 2.13.0rc0
tensorflow-macos 2.13.0rc1
termcolor 2.3.0
terminado 0.17.1
thinc 8.2.1
threadpoolctl 3.1.0
tinycss2 1.2.1
torch 2.0.1
torchaudio 2.0.2
torchvision 0.15.2
tornado 6.3.2
tqdm 4.65.0
traitlets 5.9.0
typer 0.9.0
typing_extensions 4.6.3
tzdata 2023.3
uc-micro-py 1.0.2
umap-learn 0.5.3
uri-template 1.3.0
urllib3 1.26.16
wandb 0.15.4
wasabi 1.1.2
watchdog 3.0.0
wcwidth 0.2.6
weasel 0.3.4
webcolors 1.13
webdataset 0.2.48
webencodings 0.5.1
websocket-client 1.6.1
Werkzeug 2.3.6
wheel 0.40.0
widgetsnbextension 4.0.8
wrapt 1.15.0
xattr 0.10.1
xyzservices 2023.5.0
$ env
MANPATH=/opt/homebrew/share/man:
TERM_PROGRAM=Apple_Terminal
GEM_HOME=/Users/shawley/gems
SHELL=/bin/bash
TERM=xterm-256color
KMP_DUPLICATE_LIB_OK=TRUE
HOMEBREW_REPOSITORY=/opt/homebrew
TMPDIR=/var/folders/5s/dkk8t0jn5fv6df9f68j9xddr0000gn/T/
LIBRARY_PATH=/opt/homebrew/lib
PYTHONUNBUFFERED=1
TERM_PROGRAM_VERSION=447
OLDPWD=/Users/shawley/github/blog
TERM_SESSION_ID=87E738C7-EE2E-4ADA-8D3A-93A29BF86763
USER=shawley
CPATH=/opt/homebrew/include
SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.J7IfhT2guA/Listeners
PYTORCH_ENABLE_MPS_FALLBACK=1
WINEARCH=win32
BASH_SILENCE_DEPRECATION_WARNING=1
VIRTUAL_ENV=/Users/shawley/envs/blog
LSCOLORS=gxfxcxdxbxegedabagacad
PATH=/Users/shawley/envs/blog/bin:/Users/shawley/.cargo/bin:/Users/shawley/gems/bin:/opt/homebrew/bin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/TeX/texbin:/opt/X11/bin:/Applications/quarto/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin
LaunchInstanceID=21AB5167-758E-4CC1-AC72-202BB19C92C4
__CFBundleIdentifier=com.apple.Terminal
PWD=/Users/shawley/github/blog/posts
LANG=en_US.UTF-8
XPC_FLAGS=0x0
PS1=(blog) \[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$
CONDA_BASE=/Users/shawley/opt/anaconda3
XPC_SERVICE_NAME=0
SHLVL=1
HOME=/Users/shawley
HOMEBREW_PREFIX=/opt/homebrew
LOGNAME=shawley
INFOPATH=/opt/homebrew/share/info:
HOMEBREW_CELLAR=/opt/homebrew/Cellar
DISPLAY=/private/tmp/com.apple.launchd.00NKVjlcg4/org.xquartz:0
SECURITYSESSIONID=186b3
VIRTUAL_ENV_PROMPT=(blog)
_=/usr/bin/env
- duckduckgo_search version 3.9.4
Thank you for finding the problem!
Fixed in v3.9.5