我想制作一个wheel二进制发行版,先将其编译,然后将其导入到python中。
- 我首先创建了轮子:
python ./my_package/setup.py bdist_wheel
- 我安装车轮:
pip install ./dist/*.whl
- 我尝试导入软件包:
python -c"import my_package"
这会导致错误:ImportError: No module named 'my_package'
另外,当我执行pip list
时,my_package
被列出。然而,当我运行which my_packge
时,什么也没有显示。
当我运行pip install ./my_package/
时,一切都按预期工作。
我如何正确地构建和安装车轮?
python版本3.5 pip版本10.1 wheel版本0.31.1
更新:
当我查看my_package-1.0.0.dist-info中的文件时,top_level.txt
中有一个意外的条目。它是我运行python ./my_package/setup.py bdist_wheel
的文件夹的名称。我相信我的setup.py
已经损坏。
**更新接受的答案:**我接受了下面的答案。但是,我认为最好将cd
简单地放入软件包目录。按照下面的建议更改到不同的目录会导致使用-d
标志时出现意外行为,即保存车轮的目标目录。这将相对于setup.py文件中指定的目录。
5条答案
按热度按时间r3i60tvu1#
我有非常相同的错误,但它是由于我的setup.py没有指定条目“packages=setuptools.find_packages()"。没有它,一切都很好地构建,但你不能导入任何东西,即使pip显示它被安装。
b1uwtaje2#
如果需要从另一个目录执行安装脚本,请确保在脚本中输入项目目录。
字符串
kokeuurv3#
在我的情况下,为了解决这个问题,我只需要升级pip(因为Docker安装了pip 9)。
字符串
efzxgjgh4#
我也遇到过同样的情况,可能原因不一样,这里只是供参考。软件包名称不应该包含破折号“-",没有错误弹出,但安装后,虽然它显示在pip列表中,你找不到那个包。
/src/your-package-name #不应该
/src/your_package_name #应该是这样的
在setup.py中,您可以无限制地使用带破折号“-”的名称:
字符串
t98cgbkg5#
如果有人将
pyproject.toml
和setuptools
与setup.py
和setup.cfg
结合使用,那么文档中有一个注解,我很长一段时间都没有注意到。软件包的标准目录结构将被自动检测,但是如果您使用的是非标准目录结构,则可能需要查找软件包,或者显式地列出它们。我使用的是我认为是标准的目录结构,但它不是:字符串
我在
pyproject.toml
中必须做的是:型
或者这个:
型
另一个可能出现的混淆点是pip安装的wheel的名称(即从'myproject'派生),
pip list
随后显示为简单的'myproject',而不是可导入的包(即'mypackage')。