【非推奨】Rubicon-ObjC の手動インストール・インポート
🚸️ 利用上の注意 ⛔️
Rubicon-ObjC の取得
各々のやりやすい方法で、getしてきます。
GitHub
リポジトリのtop
下記のリリースページともに、ブラウザ上から.zip
ファイルで取得可能です。
(私の場合は、WorkingCopyでcloneして取得しています)
最新リリースのリンク
v0.4.8 リリース版
(このバージョンのおかげで、気軽にPythonista3で開発ができる)
pip
pip install rubicon-objc
i(Pad)OS 上での調整
必要なデータの抜き取り
ちょっとだけフォルダ名やファイル内容を書き換えるので、特定のフォルダを抜き取ります。
rubicon-objc/src/rubicon
rubicon
フォルダが必要なフォルダです。
参考
rubicon-objc
├── .git
├── .git-blame-ignore-revs
├── .github
├── .gitignore
├── .pre-commit-config.yaml
├── .readthedocs.yml
├── CHANGELOG.rst
├── CONTRIBUTING.md
├── LICENSE
├── README.rst
├── changes
├── docs
├── pyproject.toml
├── src 👈 ここの中のフォルダ
├── tests
└── tox.ini
確認する環境により、ドットファイルが出ていない場合があります(問題ありません)
書き換え
以下の状態にしていきます。
pyrubicon 👈 `rubicon` を`pyrubicon` に書き換え
├── .gitkeep 👈 追加(お好みで)
└── objc
├── __init__.py 👈 ファイル内1ヶ所変更
├── api.py
├── collections.py
├── ctypes_patch.py
├── eventloop.py
├── runtime.py
└── types.py
フォルダ名
rubicon
をpyrubicon
に書き換えをします。なお、py
以外でも問題ありません。
(特に)Pytoにて、事前に入っているrubicon
モジュールと衝突を回避するための処置です。
rubicon○○
やら○○Rubicon
でもよかったのですが、コード上でpyrubicon
<-> rubicon
の書き換えの手間を考慮すると、先頭側にあって、ただ消すだけでよい。という理由から採用をしています。
ファイル内変更
__init__.py
の内部を書き換えます。ファイル格納先は:
rubicon/objc/__init__.py
以下、変更内容です。
try:
# Read version from SCM metadata
# This will only exist in a development environment
from setuptools_scm import get_version
# Excluded from coverage because a pure test environment (such as the one
# used by tox in CI) won't have setuptools_scm
__version__ = get_version("../../..", relative_to=__file__) # pragma: no cover
except (ModuleNotFoundError, LookupError):
# If setuptools_scm isn't in the environment, the call to import will fail.
# If it *is* in the environment, but the code isn't a git checkout (e.g.,
# it's been pip installed non-editable) the call to get_version() will fail.
# If either of these occurs, read version from the installer metadata.
# importlib.metadata.version was added in Python 3.8
try:
from importlib.metadata import version
except ModuleNotFoundError:
from importlib_metadata import version
+ __version__ = None #version("rubicon-objc")
- __version__ = version("rubicon-objc")
変数__version__
には、rubicon-OjbCのバージョンが入ります。が、手動での導入の関係で参照先にバージョン情報がないのでNone
としておきます。
私は、1行分の処理の方が楽ですので、このようにしています。
try
・except
自体が無駄。と感じる方は、先頭行から__version__
定義直前までゴリっとコメントアウトしてもよいです。その際には、インデントを下げるのを忘れないように。
(追加: お好みで)
カレントディレクトリ直下に、.gitkeep
として、中身が空のファイルを追加しています。WorkingCopyを使う時の空フォルダ扱い対策として使っています。
モジュールの設置場所
階層と実行
基本的に、実行ファイルと同階層にpyrubicon
フォルダを配置します。
プロジェクトフォルダ
├── main.py 👈 実行するファイル
├── util.py 👈 `pyrubicon(rubicon)` を使った自作モジュールなど
└── pyrubicon
├── .gitkeep
└── objc
├── __init__.py
├── api.py
├── collections.py
├── ctypes_patch.py
├── eventloop.py
├── runtime.py
└── types.py
このような配置にすることで、rubiconでのサンプルコードもimport
文を少し変えるだけで実行ができます。
Your first bridge - Rubicon 0.4.8
#from rubicon.objc import ObjCClass
from pyrubicon.objc import ObjCClass # 👈 `py` を追加するだけ
NSURL = ObjCClass("NSURL")
import
の読み込み関係については、以下がわかりやすいかもです。
なおsys.path.append('..')
を使った、力技のモジュールインポート方法もありますがお好みで…。
ポータビリティ環境
プロジェクトフォルダ
設定を終えれば、使いたいアプリケーション上でフォルダ参照をして———— といった取り回しやすい環境が構築できます。
Rubicon-ObjC自体が外部モジュールへの依存がとても低いのでこのような環境が作れるのですね。
PC環境では、決して好ましいとはいえない、インストール・インポート・環境設定ですので、冒頭で提示した内容を再度掲示して終わりにします。
ありがとうございました。
Discussion