PyPI - 包不包含任何文件
PyPI - package contains no files
我已经关注了这个tutorial to upload a package to PyPI. My package is now uploaded to test instance of the index: 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
让我向您指出我之前的回答:
ilya_ezplots
是您的发行版名称,但它不是可导入的名称。安装后可导入的名称为plots
。所以:
import plots
正如@phd 回答的那样,您应该导入:import plots
.
或者您应该将目录结构更改为:
./ilya_ezplots/__init__.py
然后 import ilya_ezplots
就可以了。
导入的名称应与父目录匹配。
参考 this post 以保持正确的结构和良好做法。
最好的做法是保留一些命名空间或与您的包名称相同的目录名称,这样用户就不会感到困惑。
如果您的项目名称是 xyz
,那么您应该将目录名称保持为 xyz
。因此,使用可以 import xyz
导入您的包,不会与其他包混淆。例如。如果您使用 yyy
作为您的目录名称(并且您的包名称是 xyz
),那么用户可能会感到困惑并安装包 yyy
。
一个现实生活中的例子:
包 beautifulsoup 需要 import bs4
导入它,因此他们维护 bs4
包(虚拟包)以便没有人可以创建名称为 bs4
的包因为这可能会成为安全风险。
我已经关注了这个tutorial to upload a package to PyPI. My package is now uploaded to test instance of the index: 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
让我向您指出我之前的回答:
ilya_ezplots
是您的发行版名称,但它不是可导入的名称。安装后可导入的名称为plots
。所以:
import plots
正如@phd 回答的那样,您应该导入:import plots
.
或者您应该将目录结构更改为:
./ilya_ezplots/__init__.py
然后 import ilya_ezplots
就可以了。
导入的名称应与父目录匹配。
参考 this post 以保持正确的结构和良好做法。
最好的做法是保留一些命名空间或与您的包名称相同的目录名称,这样用户就不会感到困惑。
如果您的项目名称是 xyz
,那么您应该将目录名称保持为 xyz
。因此,使用可以 import xyz
导入您的包,不会与其他包混淆。例如。如果您使用 yyy
作为您的目录名称(并且您的包名称是 xyz
),那么用户可能会感到困惑并安装包 yyy
。
一个现实生活中的例子:
包 beautifulsoup 需要 import bs4
导入它,因此他们维护 bs4
包(虚拟包)以便没有人可以创建名称为 bs4
的包因为这可能会成为安全风险。