-
Notifications
You must be signed in to change notification settings - Fork 6
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
PyO3과련 기존 레이아웃 변경 Rollback 논의: python/furiosa/models --> furiosa/models #25
Comments
혹시 P.S. python 폴더 밑에 프로젝트를 두는 것은 위와 같이 실제로 깔리지 않았는데 import가 되는 상황을 구별할수 있다는 점 때문에 권장되고 있는 것입니다. |
"pip install -e ."이후 furiosa.models.furiosa_models_native.so가 빌드이후 python/furiosa/models 로 옮겨진다는 거군요. 제가 조금 더 확인해 보겠습니다. |
네네 |
네, 제가 해본 스텝은 다음과 같습니다. Cargo.toml 설정 파일입니다. [package]
name = "furiosa-models"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[lib]
name = "furiosa_models_native"
crate-type = ["cdylib"]
# https://maturin.rs/project_layout.html#alternate-python-source-directory-src-layout
[package.metadata.maturin]
python-source = "furiosa"
name = "models.furiosa_models_native"
[dependencies]
pyo3 = { version = "0.16.5", features = ["extension-module"] }
다음의 python script 실행 import furiosa.models
from furiosa.models import sum_as_string
sum_as_string(1,2) python-source의 하위에 모든 폴더가 또한 |
저도 혁준님이 구성하신대로 구성하고 실험해 보았습니다. 저는 pip install -e .
cd ..
python -c "import furiosa.models" 즉 아래 스크립트를 실행하기 전에 import furiosa.models
from furiosa.models import sum_as_string
sum_as_string(1,2) 실제로 설치된 패키지는 models입니다. 그래서 어느 위치에서든 import models
from models import sum_as_string
sum_as_string(1,2) 코드는 작동하게 됩니다. 원래의 프로젝트 구조에서는 furiosa.models 패키지가 설치되지가 않습니다. 혁준님이 실행하신 #8 과 #10 의 댓글도 함께 읽어주시면 정말 감사하겠습니다. 제가 #10 에서 라고 적어 현식님과 혁준님 모두에게 혼란을 드린 것 같은데요, 좀 자세히 다시 말하자면, 원래 구조에서는 패키지가 설치되지 않아도 local relative import( 근데 rust 프로젝트도 src 밑에 소스 코드들을 저장하는데요, 파이썬과 러스트 소스코드가 모두 src 밑에 저장되면 어느 파일이 어느 프로젝트에 속하는지 모르게 되어 동작을 안 하게 됩니다. 근데 파이썬과 러스트가 다른 점이 있습니다. 러스트는 소스 코드가 꼭 src 디렉토리 밑에 있기를 기대하는 반면, 파이썬은 디렉토리 이름이 꼭 src가 아니어도 됩니다. 그래서 PyO3에서 python 소스 코드들을 참고할만한 이슈: PyO3/maturin#490 |
네, 상기 부분은 제가 더 테스트 해보겠습니다. 잘 안되는 점은 있는 듯 합니다. 아직도 어려운 점은 다음의 스텝입니다.
|
네 저도 그래서 더 해결 방법을 찾아 보려고 하고 있습니다. ㅜㅜ |
네, 고생하십니다. -> python/ 밑에 구조는 조금 전 저의 실수를 막기 위해선, 좋은 구조일 듯 합니다. -> 아직 maturin은 성숙도가 높지 않은 듯합니다. 그래서 고전적이지만, 그나마 온갖 수난을 겪인 setuptools-rust 를 하는 것을 제안드려 봅니다. 추후에 maturin의 성숙도가 높았을때 해도 목적 달성에는 큰 지장이 없을 듯 합니다. MANIFEST.in
setup.py from setuptools import find_namespace_packages, setup
from setuptools_rust import Binding, RustExtension
setup(
name="furiosa-models",
version="1.0",
packages=["furiosa.models"],
package_dir={'': 'python'},
# packages=find_namespace_packages(include=["furiosa.models.*"]),
rust_extensions=[
RustExtension(
"furiosa.models.furiosa_models_native",
path="Cargo.toml",
binding=Binding.PyO3,
debug=False,
)
],
# rust extensions are not zip safe, just like C-extensions.
zip_safe=False,
) Cargo.toml [package]
name = "furiosa-models"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[lib]
name = "furiosa_models_native"
crate-type = ["cdylib"]
# https://maturin.rs/project_layout.html#alternate-python-source-directory-src-layout
#[package.metadata.maturin]
#python-source = "furiosa"
#name = "models.furiosa_models_native"
[dependencies]
pyo3 = { version = "0.16.5", features = ["extension-module"] }
pyproject.toml [build-system]
#requires = ["maturin>=0.13,<0.14"]
#build-backend = "maturin"
requires = ["setuptools", "wheel", "setuptools-rust"]
[project]
name = "furiosa-models"
version = "0.0.1"
authors = [{ name = "FurioaAI Inc.", email = "pkg@furiosa.ai" }]
readme = "README.md"
license = { file = "LICENSE" }
classifiers = [
"Development Status :: 3 - Alpha",
"Environment :: Console",
"Environment :: Web Environment",
"Intended Audience :: Developers",
"Intended Audience :: System Administrators",
"License :: OSI Approved :: Apache Software License",
"Programming Language :: Rust",
"Programming Language :: Python :: Implementation :: CPython",
"Programming Language :: Python :: Implementation :: PyPy",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Topic :: Software Development :: Libraries :: Python Modules",
"Topic :: Scientific/Engineering :: Artificial Intelligence",
]
description = "Furiosa Models"
requires-python = "~=3.7"
dependencies = [
"furiosa-registry == 0.7.*",
"furiosa-common == 0.7.*",
"onnx",
"onnxruntime",
"opencv-python-headless",
"pycocotools",
"timm",
"torch",
"torchvision",
"dvc[s3]",
"pydantic",
# Protobuf major version change issue: https://github.com/furiosa-ai/furiosa-artifacts/issues/23
"protobuf < 4.0dev",
"segmentation_models_pytorch",
"pretrainedmodels",
"effdet",
"cbox_decode @ git+https://github.com/furiosa-ai/furiosa-artifacts.git#subdirectory=furiosa/models/vision/yolov5/box_decode/cbox_decode"
]
[project.optional-dependencies]
test = [
"furiosa-runtime == 0.7.*",
"pytest",
"pytest-asyncio ~= 0.17.2",
]
[project.urls]
Home = "https://furiosa.ai"
Documentation = "https://github.com/furiosa-ai/furiosa-artifacts"
"Bug Tracker" = "https://github.com/furiosa-ai/furiosa-artifacts/issues"
"Source Code" = "https://github.com/furiosa-ai/furiosa-artifacts"
[tool.black]
skip-string-normalization = true
line-length = 100
target-version = ["py37", "py38", "py39"]
extend-exclude = "/generated/"
[tool.isort]
force_sort_within_sections = true
known_first_party = ["furiosa"]
line_length = 100
profile = "black"
extend_skip_glob = ["**/generated/**"]
[tool.pytest.ini_options]
asyncio_mode = "strict"
pythonpath = ["."] 최종 테스트test_install.sh
cd .. test_furiosa_models.py from furiosa.models import sum_as_string
import furiosa.models.vision
print(sum_as_string(1,2)) |
저는 좋은데요. @furiosamg 님도 좋으시면 PR 올려주시면 바로 머지하겠습니다. |
네 maturin을 안 쓰는 것이 좋은 방법일 것 같습니다. 조사해주시고 알아봐 주셔서 정말 감사합니다. 이런 일을 겪다보니 파이썬의 패키징 관리가 얼마나 엉망인지, principle없이 기능 추가하면서 개발하면 어떤 결과가 나오는지 등 깨우친 바가 많네요.. |
혁준님이 휴가셔서 제가 PR 열겠습니다. 혁준님이 작업 결과공유주셔서 금방 할 것 같습니다 :) |
이미 1년전 close된 이슈고 프로젝트 진전 등 고려하면 바뀔가능성이 없어보이기는 하지만, 그사이에 maturin은 python하위 폴더를 사용하는것으로 방향성을 잡아 통일하였고 setuptools-rust측과도 연계하여 그런 방향으로 자리잡아가는것 같습니다.
|
안녕하세요 먼저 저희 프로젝트에 관심 가져주셔서 감사합니다! :) 다시 한번 관심 감사드립니다! |
@furiosamg 님, @hyunsik 님,
제가 테스트 해본 결과
기존 레이아웃 방식이 잘 진행되고 테스트도 잘 되었습니다.
예를들면, furiosa.init.py 를 생성하지 않아도 됩니다.
PyO3 문서에 따르면(https://maturin.rs/project_layout.html#alternate-python-source-directory-src-layout)가 python 폴더를 만들라는 것도 아닌 듯합니다.
Test code
pip install -e .
Originally posted by @hyeokjunejeon in #10 (comment)
The text was updated successfully, but these errors were encountered: