python install wheel导致导入错误

jexiocij  于 12个月前  发布在  Python
关注(0)|答案(5)|浏览(141)

我想制作一个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文件中指定的目录。

r3i60tvu

r3i60tvu1#

我有非常相同的错误,但它是由于我的setup.py没有指定条目“packages=setuptools.find_packages()"。没有它,一切都很好地构建,但你不能导入任何东西,即使pip显示它被安装。

b1uwtaje

b1uwtaje2#

如果需要从另一个目录执行安装脚本,请确保在脚本中输入项目目录。

from setuptools import setup

root = os.path.normpath(os.path.join(os.path.abspath(__file__), os.pardir))
os.chdir(root)

# or using pathlib (Python>=3.4):
import patlib
root = pathlib.Path(__file__).parent
os.chdir(str(root))

setup(...)

字符串

kokeuurv

kokeuurv3#

在我的情况下,为了解决这个问题,我只需要升级pip(因为Docker安装了pip 9)。

python3 -m pip install --upgrade pip

字符串

efzxgjgh

efzxgjgh4#

我也遇到过同样的情况,可能原因不一样,这里只是供参考。软件包名称不应该包含破折号“-",没有错误弹出,但安装后,虽然它显示在pip列表中,你找不到那个包。
/src/your-package-name #不应该
/src/your_package_name #应该是这样的
在setup.py中,您可以无限制地使用带破折号“-”的名称:

setuptools.setup(
name="instrument-lab",
...

字符串

t98cgbkg

t98cgbkg5#

如果有人将pyproject.tomlsetuptoolssetup.pysetup.cfg结合使用,那么文档中有一个注解,我很长一段时间都没有注意到。软件包的标准目录结构将被自动检测,但是如果您使用的是非标准目录结构,则可能需要查找软件包,或者显式地列出它们。我使用的是我认为是标准的目录结构,但它不是:

/path/to/myproject/
    ├── mypackage/                  Python package directory.
    │   ├── __init__.py             This makes the directory a package.
    │   └── example_module.py       An example module.
    ├── pyproject.toml              Definition of build process of the package.
    ├── README.md                   README with info of the project.
    └── setup.cfg                   Configuration details of the python package.

字符串
我在pyproject.toml中必须做的是:

[tool.setuptools]
packages = ["mypackage"]


或者这个:

[tool.setuptools.packages.find]
where = ["."]


另一个可能出现的混淆点是pip安装的wheel的名称(即从'myproject'派生),pip list随后显示为简单的'myproject',而不是可导入的包(即'mypackage')。

相关问题