Ich bin grafi und arbeite in Teilzeit bei ALBERT Co., Ltd. Ich habe noch nie bei Qiita gepostet, aber ich werde es zum ersten Mal posten.
Deshalb bauen Sie OpenCV. Ich denke, es gibt Erklärungen, wie man es baut, also werde ich es weglassen. Dadurch wird eine Datei wie "cv2. Irgendwie .so" als Python-Modul erstellt. Um es global zu installieren, machen Sie einfach "make install".
Sie können dieses "cv2" -Modul jedoch nicht in der Umgebung sehen, die mit "virtualenv" (oder "venv") erstellt wurde, es sei denn, Sie fügen "--system-site-packages" hinzu. Wenn ich "cv2.so" irgendwie in "site-packages" in der "virtualenv" -Umgebung kopiere, funktioniert es, aber es ist einfach nicht cool.
Also fragte ich mich, ob ich daraus ein Rad machen könnte.
Was ich wirklich tun möchte, ist "Ich möchte eine vorgefertigte Erweiterung in ein Rad verwandeln", aber dies scheint nicht unterstützt zu werden.
Deshalb habe ich viele Fehler gemacht, aber ich habe es geschafft. Ich bezog mich hauptsächlich auf
Dort sind drei.
Erstens ist die Verzeichnisstruktur wie folgt.
--+-- cv2 --+-- _native --+-- cv2.irgendwie.so
| | |
| | +-- __init__.py
| |
| +-- __init__.py
|
+-- setup.py
|
+-- MANIFEST.in
In __init __. Py
direkt unter dem cv2
Verzeichnis
import * from _native.cv2
Schreiben. Das "__init __. Py" im Verzeichnis "_native" kann leer sein.
setup.py
ist wie folgt
from setuptools import setup
from setuptools.dist import Distribution
class BinaryDistribution(Distribution):
def has_ext_modules(foo):
return True
setup(
name='cv2',
version='1.0',
packages=['cv2'],
include_package_data=True,
distclass=BinaryDistribution,
)
Auch "MANIFEST.in" ist
include cv2/_native/cv2.irgendwie.so
Schreiben.
Wenn Sie nun "python setup.py bdist_wheel" ausführen, haben Sie ein Rad mit einem Dateinamen wie "cv2-1.0-cp36-cp36m-linux_x86_64.whl" unter "dist". Ich bin glücklich.
Sie müssen lediglich ein Dummy-Paket erstellen und alle Definitionen im ursprünglichen cv2
-Modul exportieren. Ich möchte das ursprüngliche "cv2" -Modul vorerst ausblenden, aber wenn ich "cv2" umbenenne. Irgendwie .so "in" _cv2 ". Irgendwie .so" wird es nicht funktionieren, also habe ich es gelöst, indem ich es in ein anderes Paket gesteckt habe. tat.
Indem Sie Ihnen zwangsweise mitteilen, dass die Erweiterung enthalten ist, indem Sie "has_ext_modules = True" setzen, können Sie das Rad so einstellen, dass die Installation abgelehnt wird, wenn Sie es auf ein anderes Betriebssystem bringen.
numpy
und scipy
funktionieren nur dann gut, wenn Sie sie selbst kompilieren und mit einer Hochleistungsmatrix-Operationsbibliothek verknüpfen. Es ist jedoch auch praktisch, das kompilierte Ergebnis als Rad zu behalten. Ich werde dieses Detail später schreiben.
Recommended Posts