我有一个带有setup.py
文件的包,该文件导入外部包(如numpy
和Cython
),以便在安装期间构建包。下面是我的setup.py
文件的顶部:
#!/usr/bin/env python3
import os
import sys
from Cython.Build import cythonize
from Cython.Distutils import build_ext
import numpy as np
from setuptools import find_packages, setup, Extension
我想在我当前的虚拟环境中安装我的包(我使用mamba
)。为此,我运行
pip install -e .
但是,我得到这个错误:
File "/tmp/pip-build-env-u_xs09i6/overlay/lib/python3.9/site-packages/setuptools/build_meta.py", line 335, in run_setup
exec(code, locals())
File "<string>", line 5, in <module>
ModuleNotFoundError: No module named 'Cython'
我验证的事情
已验证的python正在工作
我知道Cython
已经安装并且正在工作,因为我可以从python会话中导入它:
❯ python
Python 3.9.15 | packaged by conda-forge | (main, Nov 22 2022, 15:55:03)
[GCC 10.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import Cython
>>>
我还通过打印可执行路径(sys.executable
)验证了会话和pip install
都运行相同的python。
cython
import我在setup.py中删除了import Cython
语句,只是为了看看pip install -e .
中发生了什么,但现在它找不到numpy
包,这导致我认为在没有发现环境的地方发生了一些奇怪的事情,即使它在其中运行……
用不同的方法安装我的包
当我使用python setup.py --develop
安装我的包时,它工作了!
但是我需要pip install
命令工作,因为我使用的部署系统运行pip
。
经过大量的试验和错误,并从头开始,结果证明文件pyproject.toml
是罪魁祸首....
根据文档,该文件应该列出构建时依赖项,因为该文件的存在告诉pip使用隔离的构建环境。当我将这些依赖项添加到文件中时:
[build-system]
requires = ["setuptools ~= 67.0.0", "cython ~= 0.29.0", "numpy ~= 1.23.5"]
一切正常…