我已按照本教程将包上传到 PyPI。我的包现在已上传到索引的测试实例:https : //test.pypi.org/project/ilya-ezplots/#files。但是,当我使用 pip 安装它时,我仍然无法导入它。>>> import ilya_ezplotsTraceback (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 setuptoolssetuptools.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 bashrm -r distpython setup.py sdist bdist_wheelpython -m twine upload -r testpypi dist/* -u ikamensh文件结构:././plots/__init__.py./setup.py./upload.sh
2 回答
芜湖不芜
TA贡献1796条经验 获得超7个赞
让我指出我之前的答案:https : //stackoverflow.com/a/54599368/7976758
ilya_ezplots
是您的发行版的名称,但它不是可导入的名称。安装后可导入的名称为plots
. 所以:
import plots
海绵宝宝撒
TA贡献1809条经验 获得超8个赞
您应该导入:import plots
。
或者您应该将目录结构更改为:
./ilya_ezplots/__init__.py
然后import ilya_ezplots
就可以解决问题了。
导入的名称应与父目录匹配。
参考这篇文章以保持正确的结构和良好的实践。
好的做法是维护一些命名空间或与您的包名称相同的目录名称,这样用户就不会感到困惑。
如果您的项目名称是,xyz
那么您应该将目录名称保持为xyz
. 因此,用户可以import xyz
导入您的包,而不会与其他包混淆。例如。如果您将其yyy
用作目录名称(并且您的软件包名称是xyz
),那么用户可能会感到困惑并yyy
改为安装软件包。
一个真实的例子:
包 beautifulsoup 需要import bs4
导入它,因此他们维护bs4
包(虚拟包),因此没有人可以创建具有该名称的包,bs4
因为这可能会带来安全风险。
添加回答
举报
0/150
提交
取消