Issue
I've installed my library using the following command:
pip install .
Here is the directory structure:
└───module1
├───__init__.py
└───mod_1.py
└───module2
├───__init__.py
└───mod_2.py
__init__.py
setup.py
inside setup.py
from setuptools import setup,find_packages
setup(
name = "my_lib",
version="1.0.0",
packages=find_packages(),
python_requires='>=3.7',
include_package_data=True,
zip_safe=False)
Installed in:
.\Python\Python312\Lib\site-packages
└───module1
├───____pycache__
├───__init__.py
└───mod_1.py
└───module2
├───____pycache__
├───__init__.py
└───mod_2.py
└───my_lib-1.0.0.dist-info
├───direct_url.json
├───INSTALLER
├───METADATA
├───RECORD
├───REQUESTED
├───top_level.txt
└───WHEEL
Expected behavior/import:
from my_lib import mod_1, mod_2
Current error is:
ModuleNotFoundError: No module named 'my_lib'
Work around:
import mod_1, mod_2
Need help with:
What do I need to change in my structure\setup.py in order to import "my_lib" as following?
from my_lib import mod_1, mod_2
Solution
Move module1
and module2
into a my_lib
directory, and add this to my_lib/__init__.py
(also note I removed the root __init__.py
as it is not needed.)
from .module1 import mod_1
from .module2 import mod_2
.
├── build
│ ├── bdist.linux-aarch64
│ └── lib
│ └── my_lib
│ ├── __init__.py
│ ├── module1
│ │ ├── __init__.py
│ │ └── mod_1.py
│ └── module2
│ ├── __init__.py
│ └── mod_2.py
├── my_lib
│ ├── __init__.py
│ ├── __pycache__
│ │ └── __init__.cpython-312.pyc
│ ├── module1
│ │ ├── __init__.py
│ │ ├── __pycache__
│ │ │ ├── __init__.cpython-312.pyc
│ │ │ └── mod_1.cpython-312.pyc
│ │ └── mod_1.py
│ └── module2
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── __init__.cpython-312.pyc
│ │ └── mod_2.cpython-312.pyc
│ └── mod_2.py
├── my_lib.egg-info
│ ├── PKG-INFO
│ ├── SOURCES.txt
│ ├── dependency_links.txt
│ ├── not-zip-safe
│ └── top_level.txt
└── setup.py
13 directories, 21 files
Now the imports work as you expect
Python 3.12.0 (main, Nov 29 2023, 02:50:35) [GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from my_lib import mod_1, mod_2
>>>
Answered By - Brady Dean
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.