Here is my python
project structure
▶ tree -L 2
.
├── Dockerfile
├── README.md
├── my_app
│ ├── __init__.py
│ ├── main.py
│ ├── settings.py
│ ├── utils.py
│ └── views.py
And part of my setup.py
package_dir={'': 'my_app'},
packages=find_packages(where='my_app'),
include_package_data=True,
python_requires='>=3.9',
entry_points={
'console_scripts': [
'my-app=my_app.main:run',
],
pip3 install . --force-reinstall
runs OK and I am in a virtualenv.
However, when trying to run the program
Traceback (most recent call last):
File "/Users/myuser/myfolder/.venv/bin/my-app", line 5, in <module>
from my_app.main import run
ModuleNotFoundError: No module named 'my_app'
I also noticed that in ls.venv/lib/python3.9/site-packages/
there are no source files of my-app
, only my_app-0.0.1.dist-info
file
Why is that?
You misunderstand how find_packages(where='my_app')
work, see this :
find_packages(where='.', exclude=())
Return a list all Python packages found within directory 'where'
This means it doesn't mean try to find the package my_app
from current folder, but try to find packages from the folder my_app
, in your case, no package will be found in my_app
.
So, for your case, next is enough:
setup.py :
from setuptools import setup, find_packages
setup(
name="my-app",
version="0.0.1",
packages=find_packages(),
include_package_data=True,
entry_points={
'console_scripts': [
'my-app=my_app.main:run',
],
}
)
Additional, if your main intention is just to include my_app
, bypass others, then find_packages(include=[
syntax is what you are looking for:
setup.py :
from setuptools import setup, find_packages
setup(
name="my-app",
version="0.0.1",
packages=find_packages(include=['my_app']),
include_package_data=True,
entry_points={
'console_scripts': [
'my-app=my_app.main:run',
],
}
)
NOTE , don't use package_dir={'': 'my_app'}
, it will try to find my_app.my_app
, unless you use package_dir={'my_app': 'my_app'}
, but it's meaningless in your case.
is not it the solution? pip installing in global site-packages instead of virtualenv I had smth similar on worked machine, requirements satisfied on installing, but module not found on run, removed that package globally and installed again. Might will help
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.