Используйте setup.py/pyproject.toml для компиляции библиотеки также в редактируемой установке.Python

Программы на Python
Anonymous
Используйте setup.py/pyproject.toml для компиляции библиотеки также в редактируемой установке.

Сообщение Anonymous »

Я настраиваю пакет Python с помощью setuptools вместе с pyproject.toml. Код Python зависит от библиотеки C, которую необходимо скомпилировать и установить вместе с кодом (это проект make).
Я собрал кое-что, что работает для pip install ., а также для сборки Python -m, чтобы сделать распространяемый файл:

Код: Выделить всё

# pyproject.toml

[project]
name = "mypackage"

[build-system]
requires = ["setuptools >= 61.0", "wheel"]
build-backend = "setuptools.build_meta"

[tool.setuptools]
packages = ["mypackage"]
package-dir = { "" = "src" }

Код: Выделить всё

# setup.py

from pathlib import Path
from setuptools import setup
from setuptools.command.install import install
from setuptools.command.develop import develop
from setuptools.command.build import build
import os
import subprocess

mylib_relative = "mylib"
mylib_root = Path(__file__).parent.absolute() / mylib_relative

def create_binaries():
subprocess.call(["make", "-C", mylib_relative])

def remove_binaries():
patterns = (
"*.a",
"**/*.o",
"*.bin",
"*.so",
)
for pattern in patterns:
for file in mylib_root.glob(pattern):
os.remove(file)

class CustomBuild(build):
def run(self):
print("\nCustomBuild!\n")

remove_binaries()
create_binaries()
super().run()

class CustomDevelop(develop):
def run(self):
print("\nCustomDevelop!\n")

remove_binaries()
create_binaries()
super().run()

class CustomInstall(install):
def run(self):

print("\n\nCustomInstall\n\n")

mylib_lib = mylib_root / "adslib.so"
mylib_dest = Path(self.install_lib)
if not mylib_dest.exists():
mylib_dest.mkdir(parents=True)
self.copy_file(
str(mylib_lib),
str(mylib_dest),
)
super().run()

setup(
cmdclass={
"build": CustomBuild,
"develop": CustomDevelop,
"install": CustomInstall,
},
)
Однако, когда я делаю редактируемую установку с помощью pip с помощью pip install -e . [-v], библиотека не компилируется и не устанавливается, в путь venv добавляется только исходный код Python. Но пакет не будет работать без библиотеки.
Вы можете видеть, что я уже добавил команду development в setup.py, но похоже, что ее никогда не было. вообще не вызывается.
Как мне настроить редактируемую установку так, чтобы она также сначала скомпилировала мою библиотеку?

Подробнее здесь: https://stackoverflow.com/questions/790 ... le-install

Вернуться в «Python»