我有多个项目,我正在研究几个库和几个需要这些库作为依赖项的客户端。
$ pwd
~/Projects/library
$ tree
.
├── api.py
├── __init__.py
└── setup.py
$ cat api.py
import requests
# ...
def process(data):
for record in data:
print(f"Processing {record}")
$ cat __init__.py
from .api import process
$ cat setup.py
from setuptools import find_packages, setup
setup(
name='my_library',
version='1.0.0',
packages=find_packages(),
include_package_data=True,
zip_safe=False,
install_requires=[
'requests',
],
)
然后我将代码推送到我的私人github存储库中,现在想将其安装为 client
的依赖项$ pwd
~/Projects/client
$ tree -a -L 1
.
├── .venv
└── client.py
$ cat client.py
from my_library import process
data = list(range(5))
process(data)
$ . .venv/bin/activate
(.venv) $ pip install git+ssh://git@github.com/USER/library.git
...
Installing collected packages: idna, certifi, urllib3, chardet, requests, my-library
Running setup.py install for my-library ... done
Successfully installed certifi-2019.9.11 chardet-3.0.4 idna-2.8 my-library-1.0.0 requests-2.22.0 urllib3-1.25.3
$ python client.py
Traceback (most recent call last):
File "client.py", line 1, in <module>
from my_library import process
ModuleNotFoundError: No module named 'my_library'
我意识到并正在思考的一个问题可能与问题有关;
library
(单字)setup.py
中,名称为my_library
(name='my_library'
)(下划线分隔)pip freeze
将其显示为my-library==1.0.0
(用连字符分隔)答案 0 :(得分:1)
您对项目名称和程序包/模块名称感到困惑。
Python导入系统不关心项目名称,只有pip关心。
Python关心软件包和模块,但是您的项目没有软件包,因此find_packages()不会向您的文件夹添加任何内容。
您应该做的是:
更多信息here