簡體   English   中英

Python 本地包創建/導入失敗(悲慘地)

[英]Python Local Package Creation/Import Failing (Miserably)

我有幾個看似簡單的用例,但我覺得我錯過了一步。

基本上,我有這個項目結構:

|- 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

...我在列出的軟件包中看到了“session-data-access 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 語句將包中的文件剪切並粘貼到項目中,則它可以正常工作。

這發生在我嘗試在本地打包的每一段代碼上。

我到底哪里錯了?!?

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

編輯:

正如我剛剛通過您評論中的 鏈接發現的那樣,Python 3.3 引入了本機命名空間包,如果您在setup.py配置中使用setuptools.find_namespace_packages()而不是setuptools.find_packages() ,它允許您省略__init__.py文件文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM