python 安装 wheel 导致导入错误
python install wheel leads to import error
我想制作一个 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
点版本 10.1
轮子版本 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 文件中指定的目录。
如果您需要从另一个目录执行安装脚本,请确保您在脚本中输入项目目录。
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(...)
我遇到了同样的错误,但这是由于我的 setup.py 没有指定条目 "packages=setuptools.find_packages()"。
没有它,一切都可以很好地构建,但是即使 pip 显示它已安装,你也无法导入任何东西。
就我而言,为了解决这个问题,我只需要升级 pip(因为 Docker 安装了 pip 9)。
python3 -m pip install --upgrade pip
我遇到过同样的情况,可能不是同样的原因,这里仅供参考。
包名不能有破折号“-”,不会报错,但是安装wheel后,虽然在pip列表中显示了,但是找不到那个包。
/src/your-package-name # should not
/src/your_package_name # should like this
在setup.py中,可以无限制地使用带“-”的名称:
setuptools.setup(
name="instrument-lab",
...
我想制作一个 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 点版本 10.1 轮子版本 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 文件中指定的目录。
如果您需要从另一个目录执行安装脚本,请确保您在脚本中输入项目目录。
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(...)
我遇到了同样的错误,但这是由于我的 setup.py 没有指定条目 "packages=setuptools.find_packages()"。 没有它,一切都可以很好地构建,但是即使 pip 显示它已安装,你也无法导入任何东西。
就我而言,为了解决这个问题,我只需要升级 pip(因为 Docker 安装了 pip 9)。
python3 -m pip install --upgrade pip
我遇到过同样的情况,可能不是同样的原因,这里仅供参考。 包名不能有破折号“-”,不会报错,但是安装wheel后,虽然在pip列表中显示了,但是找不到那个包。
/src/your-package-name # should not
/src/your_package_name # should like this
在setup.py中,可以无限制地使用带“-”的名称:
setuptools.setup(
name="instrument-lab",
...