我有几个看似简单的用例,感觉好像缺少了一步。
基本上,我有这个项目结构:
|- session_storage_base.py
|- aws_session_storage.py
|- README.md
|- setup.py
这是setup.py:
import setuptools
with open("README.md", "r") as fh:
long_description = fh.read()
setuptools.setup(
name="session_data_access",
version="0.3",
author="Colin",
author_email="colin@asdf.com",
description="session storage data access.",
long_description=long_description,
long_description_content_type="text/markdown",
url="https://github.com/...",
packages=setuptools.find_packages(),
classifiers=[
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
],
python_requires='>=3.6',
)
我运行命令:
python3 setup.py sdist bdist_wheel
...成功创建了session_data_access-0.3.tar.gz。
然后我运行:
python3 -m pip install /Users/.../dist/session_data_access-0.3.tar.gz
...以及当我跟进时:
python3 -m pip list
...我在列出的软件包中看到“会话数据访问0.0.3”。
当我跑步时:
which python3
...值是:“ / Library / Frameworks / Python.framework / Versions / 3.8 / bin / python3”。
我还在VS Code中设置了Python解释器,以确保它指向上述路径。
但是,当我这样做时:
import aws_session_storage
... VS Code的行头弯曲,错误为:“无法导入aws_session_storage”。
如果我使用import语句将包中的文件剪切并粘贴到项目中,则效果很好。
这种情况发生在我尝试本地打包的每段代码上。
我到底哪里出问题了?!?
答案 0 :(得分:2)
setuptools.find_packages()试图在您的存储库中找到一个软件包,这意味着:
Python模块,可以包含其他模块或递归地包含其他软件包。
(来源:https://packaging.python.org/glossary/#term-Import-Package)
因此,如果将python脚本捆绑到模块中,您应该会很好:
|- session_data_access/
| |- __init__.py
| |- session_storage_base.py
| |- aws_session_storage.py
|- README.md
|- setup.py
按照您的安装方式安装后,您应该可以做到:
from session_data_access import aws_session_storage
编辑:
正如我刚刚感谢您的评论中的link一样,Python 3.3引入了native namespace packages,如果您使用setuptools.find_namespace_packages()而不是setuptools.find_packages(),则可以省略__init__.py
文件setup.py
配置文件中的{{3}}。