我已遵循此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-info
和h5py
。
我的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
答案 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
的程序包,因为这可能会成为一种安全措施。风险。