Python本地软件包创建/导入失败(严重)

时间:2020-09-16 22:38:24

标签: python python-3.x visual-studio-code

我有几个看似简单的用例,感觉好像缺少了一步。

基本上,我有这个项目结构:

|- 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语句将包中的文件剪切并粘贴到项目中,则效果很好。

这种情况发生在我尝试本地打包的每段代码上。

我到底哪里出问题了?!?

1 个答案:

答案 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}}。