PyPI-软件包不包含文件

时间:2019-04-16 17:25:58

标签: python pip setuptools pypi

我已遵循此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解释器的站点包,仅找到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

2 个答案:

答案 0 :(得分:1)

让我为您指出我以前的答案:https://stackoverflow.com/a/54599368/7976758

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

import plots

答案 1 :(得分:0)

@phd回答,您应该导入:import plots

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

./ilya_ezplots/__init__.py

然后import ilya_ezplots可以解决问题。

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

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

好的做法是维护一些名称空间或与包名称相同的目录名,以免使用户感到困惑。

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

一个真实的例子:

程序包beautifulsoup需要import bs4来导入,因此它们维护bs4程序包(虚拟程序包),因此没有人可以创建名称为bs4的程序包,因为这可能会成为一种安全措施。风险。