PyPI - 包不包含任何文件

问题描述 投票:1回答:2

我跟着这个tutorial上传了一个包给PyPI。我的包现在上传到索引的测试实例:https://test.pypi.org/project/ilya-ezplots/#files。但是当我用pip安装它时,我仍然无法导入它。

>>> import ilya_ezplots
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'ilya_ezplots'

我检查了我的python解释器的site-packages,发现只有ilya_ezplots-0.0.2.dist-info目录。对于其他包,将有两个目录,例如h5py-2.9.0.dist-infoh5py

我的setup.py:

import setuptools

setuptools.setup(
    name="ilya_ezplots",
    version="0.0.2",
    packages=['plots'],
    classifiers=[
        "Programming Language :: Python :: 3",
        "License :: OSI Approved :: MIT License",
        "Operating System :: OS Independent",
    ],
)

上传脚本:

#!/usr/bin/env bash

rm -r dist
python setup.py sdist bdist_wheel
python -m twine upload -r testpypi dist/* -u ikamensh

文件结构:

./
./plots/__init__.py
./setup.py
./upload.sh
python pip setuptools pypi
2个回答
1
投票

让我告诉你我之前的回答:https://stackoverflow.com/a/54599368/7976758

ilya_ezplots是您的发行版的名称,但它不是可导入的名称。安装后的可导入名称是plots。所以:

import plots

0
投票

正如@phd回答的那样,你应该导入:import plots

或者您应该将目录结构更改为:

./ilya_ezplots/__init__.py

然后import ilya_ezplots可以做到这一点。

导入的名称应与父目录匹配。

请参阅this帖子以保持正确的结构和良好实践。

好的做法是维护一些命名空间或与包名相同的目录名,这样用户就不会感到困惑。

如果您的项目名称是xyz,那么您应该将目录名称保持为xyz。因此,使用import xyz可以导入您的包,不会与其他包混淆。例如。如果您使用yyy作为您的目录名称(并且您的包名称是xyz),那么用户可能会感到困惑并安装包yyy

一个真实的例子:

package beautifulsoup需要import bs4来导入它,因此他们维护bs4包(虚拟包),这样就没有人可以创建名为bs4的包,因为这可能会成为安全风险。

© www.soinside.com 2019 - 2024. All rights reserved.