dir1/
|-- helloworld/
|-- __init__.py
|-- hello.py
|-- setup.py
|-- venv/ #The dir1 virtual environment
dir2/
|-- app2.py
|-- venv/ #The dir2 virtual environment
# hello.py
def say_hello():
return "Hello, World!"
# setup.py
from setuptools import setup, find_packages
setup(
name='helloworld',
version='0.1',
packages=find_packages(),
)
C:\Users\TC\temp\editable\dir2>venv\Scripts\activate
(venv) C:\Users\TC\temp\editable\dir2>
(venv) C:\Users\TC\temp\editable\dir2>pip install -e C:\Users\TC\temp\editable\dir1
# app2.py
from helloworld.hello import say_hello
print(say_hello())
python app2.py
Now here is the problem. helloworld package is not found from app2.py. However, pip list does show that the helloworld package has been installed. Using VS Code, there is a yellow squiggly line underneath helloword.hello, which indicates that package not found.
This is a very simple setup to test the editable installation of a python package. I wonder the error is producible. Or this is a bug! OS is windows.
Please let me know if you get the same error or you will be able to get it to work.
Any help will be greatly appreciated.
Note:
You need to pip install setuptools
in dir1 venv.
# app2.py
from helloworld.hello import say_hello
print(say_hello())
After pip editable mode installation,
(venv) C:\Users\TC\temp\editable\dir2>pip install -e C:\Users\TC\temp\editable\dir1
the following error appears in app2.py.
Import "helloworld.hello" could not be resolvedPylance(reportMissingImports)
However, the app2.py runs fine. If pip install without editable mode, the error message disappears and IntelliSense works.
I have tried many ways to get the IntelliSense to work under the editable mode without success.
Therefore I conclude for some unknown reason, helloworld package is not installed under the editable mode. Instead the following folders are installed in venv\lib\site-packages
2024-10-17 11:24 PM 91 __editable__.helloworld-0.1.0.pth
2024-10-17 11:24 PM 3,436 __editable___helloworld_0_1_0_finder.py
Since no helloworld package folder exists, Pylance therefore cannot resolve the import.
Problem solved.
PYTHONPATH=C:/Users/TC/temp/editable/dir1
{
"python.envFile": "${workspaceFolder}/.env"
}
From chatgpt
No, there is no way to name the package helloworld without creating a directory named helloworld. In Python packaging, the package name must correspond to a directory that contains an init.py file. This structure is essential for Python to recognize and import the package correctly.