Author: Marc Shapiro Date: To: dng Subject: [DNG] Python Virtual Environment strangeness
A while back, I posted about issues with using yfinance and python's
virtual environments. I was having problems with getting the venv to
work, even though it seemed fairly straightforward. I ended up
rewriting the python scrips to avoid using yfinance to get around the
problem.
I decided, however, that I really should get venvs working for the next
time that I write something in python. So I created a venv and
installed yfinance in it. As expected, it pulled in a slew of other
packages. I copied the old version of my program (that requires
yfinance) into the directory containing the venv and tried to run it.
The results are as follows:
---------- First, it says that it can't find curl_cffi ----------
marc:~/PythonProjects$ source pyquotes-y/.venv/bin/activate
(.venv) marc:~/PythonProjects$ cd pyquotes-y
(.venv) marc:~/PythonProjects/pyquotes-y$ pyquotes-y
Traceback (most recent call last):
File "/usr/local/bin/pyquotes-y", line 12, in <module>
import yfinance as yf
File "/usr/local/lib/python3.13/dist-packages/yfinance/__init__.py",
line 23, in <module>
from .search import Search
File "/usr/local/lib/python3.13/dist-packages/yfinance/search.py",
line 26, in <module>
from .data import YfData
File "/usr/local/lib/python3.13/dist-packages/yfinance/data.py", line
5, in <module>
from curl_cffi import requests
ModuleNotFoundError: No module named 'curl_cffi'
---------_ Then, I try to install curl_cffi, but pip says it is already
installed and everything is good -----------
(.venv) marc:~/PythonProjects/pyquotes-y$ pip install curl_cffi
Requirement already satisfied: curl_cffi in
./.venv/lib/python3.13/site-packages (0.11.3)
Requirement already satisfied: cffi>=1.12.0 in
./.venv/lib/python3.13/site-packages (from curl_cffi) (1.17.1)
Requirement already satisfied: certifi>=2024.2.2 in
./.venv/lib/python3.13/site-packages (from curl_cffi) (2025.4.26)
Requirement already satisfied: pycparser in
./.venv/lib/python3.13/site-packages (from cffi>=1.12.0->curl_cffi) (2.22)
---------- And the directory listing shows that curl_cffi is there ---------
(.venv) marc:~/PythonProjects/pyquotes-y$ ls
.venv/lib/python3.13/site-packages
total 1772
drwxrwxr-x 3 marc marc 4096 Jun 9 16:36 beautifulsoup4-4.13.4.dist-info
drwxrwxr-x 5 marc marc 4096 Jun 9 16:36 bs4
drwxrwxr-x 3 marc marc 4096 Jun 9 16:36 certifi
drwxrwxr-x 3 marc marc 4096 Jun 9 16:36 certifi-2025.4.26.dist-info
drwxrwxr-x 3 marc marc 4096 Jun 9 16:36 cffi
drwxrwxr-x 2 marc marc 4096 Jun 9 16:36 cffi-1.17.1.dist-info
-rwxrwxr-x 1 marc marc 1115040 Jun 9 16:36
_cffi_backend.cpython-313-x86_64-linux-gnu.so
drwxrwxr-x 4 marc marc 4096 Jun 9 16:36 charset_normalizer
drwxrwxr-x 3 marc marc 4096 Jun 9 16:36
charset_normalizer-3.4.2.dist-info
drwxrwxr-x 4 marc marc 4096 Jun 9 16:36 curl_cffi
drwxrwxr-x 3 marc marc 4096 Jun 9 16:36 curl_cffi-0.11.3.dist-info
drwxrwxr-x 6 marc marc 4096 Jun 9 16:36 dateutil
drwxrwxr-x 3 marc marc 4096 Jun 9 16:36 frozendict
drwxrwxr-x 2 marc marc 4096 Jun 9 16:36 frozendict-2.4.6.dist-info
drwxrwxr-x 4 marc marc 4096 Jun 9 16:36 google
drwxrwxr-x 3 marc marc 4096 Jun 9 16:36 idna
drwxrwxr-x 2 marc marc 4096 Jun 9 16:36 idna-3.10.dist-info
drwxrwxr-x 3 marc marc 4096 Jun 9 16:36 multitasking
drwxrwxr-x 2 marc marc 4096 Jun 9 16:36 multitasking-0.0.11.dist-info
drwxrwxr-x 24 marc marc 4096 Jun 9 16:36 numpy
drwxrwxr-x 2 marc marc 4096 Jun 9 16:36 numpy-2.3.0.dist-info
drwxrwxr-x 2 marc marc 4096 Jun 9 16:36 numpy.libs
drwxrwxr-x 16 marc marc 4096 Jun 9 16:36 pandas
drwxrwxr-x 2 marc marc 4096 Jun 9 16:36 pandas-2.3.0.dist-info
drwxrwxr-x 3 marc marc 4096 Jun 9 16:36 peewee-3.18.1.dist-info
-rw-rw-r-- 1 marc marc 281978 Jun 9 16:36 peewee.py
drwxrwxr-x 5 marc marc 4096 Jun 9 16:24 pip
drwxrwxr-x 3 marc marc 4096 Jun 9 16:24 pip-25.1.1.dist-info
drwxrwxr-x 3 marc marc 4096 Jun 9 16:36 platformdirs
drwxrwxr-x 3 marc marc 4096 Jun 9 16:36 platformdirs-4.3.8.dist-info
drwxrwxr-x 3 marc marc 4096 Jun 9 16:36 playhouse
drwxrwxr-x 2 marc marc 4096 Jun 9 16:36 protobuf-6.31.1.dist-info
-rw-rw-r-- 1 marc marc 8193 Jun 9 16:36 pwiz.py
drwxrwxr-x 2 marc marc 4096 Jun 9 16:36 __pycache__
drwxrwxr-x 4 marc marc 4096 Jun 9 16:36 pycparser
drwxrwxr-x 2 marc marc 4096 Jun 9 16:36 pycparser-2.22.dist-info
drwxrwxr-x 2 marc marc 4096 Jun 9 16:36
python_dateutil-2.9.0.post0.dist-info
drwxrwxr-x 4 marc marc 4096 Jun 9 16:36 pytz
drwxrwxr-x 2 marc marc 4096 Jun 9 16:36 pytz-2025.2.dist-info
drwxrwxr-x 3 marc marc 4096 Jun 9 16:36 requests
drwxrwxr-x 3 marc marc 4096 Jun 9 16:36 requests-2.32.4.dist-info
drwxrwxr-x 2 marc marc 4096 Jun 9 16:36 six-1.17.0.dist-info
-rw-rw-r-- 1 marc marc 34703 Jun 9 16:36 six.py
drwxrwxr-x 3 marc marc 4096 Jun 9 16:36 soupsieve
drwxrwxr-x 3 marc marc 4096 Jun 9 16:36 soupsieve-2.7.dist-info
drwxrwxr-x 3 marc marc 4096 Jun 9 16:36
typing_extensions-4.14.0.dist-info
-rw-rw-r-- 1 marc marc 157143 Jun 9 16:36 typing_extensions.py
drwxrwxr-x 4 marc marc 4096 Jun 9 16:36 tzdata
drwxrwxr-x 3 marc marc 4096 Jun 9 16:36 tzdata-2025.2.dist-info
drwxrwxr-x 6 marc marc 4096 Jun 9 16:36 urllib3
drwxrwxr-x 3 marc marc 4096 Jun 9 16:36 urllib3-2.4.0.dist-info
drwxrwxr-x 7 marc marc 4096 Jun 9 16:36 websockets
drwxrwxr-x 2 marc marc 4096 Jun 9 16:36 websockets-15.0.1.dist-info
drwxrwxr-x 6 marc marc 4096 Jun 9 16:36 yfinance
drwxrwxr-x 3 marc marc 4096 Jun 9 16:36 yfinance-0.2.62.dist-info
-------
Total: (55 Files) 1801857
What am I doing wrong? It seems like everything should be working, now,
but it isn't.