Hallo zusammen ,
ich habe ein Problem, bei dem ich gerade nicht weiterkomme.
Ich möchte ein .pyd File erzeugen, das aus dem Modul psutil besteht.
Man kann psutil einfach installieren, aber diese Möglichkeit besteht bei mir nicht, da ich in dem System nichts installieren kann (Keine Rechte).
Nun habe ich versucht ein .pyd Format aus psutil zu erzeugen (per setuptools)
Zunächst habe ich alle .py Dateien in .c Dateien per cythonize umgewandelt.
Mein Code:
######################
from setuptools import Extension, setup, find_packages
from Cython.Build import cythonize
from Cython.Distutils import build_ext
packages = find_packages()
print(packages)
init = Extension(
'psutils',
sources=[r"D:\testumgebung\venv\Lib\site-packages\psutil\__init__.c"],
include_dirs=['include']
)
common = Extension(
'psutils',
sources=[r"D:\testumgebung\venv\Lib\site-packages\psutil\_common.c"],
include_dirs=['include']
)
compat = Extension(
'psutils',
sources=[r"D:\testumgebung\venv\Lib\site-packages\psutil\_compat.c"],
include_dirs=['include']
)
psaix = Extension(
'psutils',
sources=[r"D:\testumgebung\venv\Lib\site-packages\psutil\_psaix.c"],
include_dirs=['include']
)
psbsd = Extension(
'psutils',
sources=[r"D:\testumgebung\venv\Lib\site-packages\psutil\_psbsd.c"],
include_dirs=['include']
)
pslinux = Extension(
'psutils',
sources=[r"D:\testumgebung\venv\Lib\site-packages\psutil\_pslinux.c"],
include_dirs=['include']
)
psosx = Extension(
'psutils',
sources=[r"D:\testumgebung\venv\Lib\site-packages\psutil\_psosx.c"],
include_dirs=['include']
)
psposix = Extension(
'psutils',
sources=[r"D:\testumgebung\venv\Lib\site-packages\psutil\_psposix.c"],
include_dirs=['include']
)
pssunos = Extension(
'psutils',
sources=[r"D:\testumgebung\venv\Lib\site-packages\psutil\_pssunos.c"],
include_dirs=['include']
)
pswindows = Extension(
'psutils',
sources=[r"D:\testumgebung\venv\Lib\site-packages\psutil\_pswindows.c"],
include_dirs=['include']
)
setup(name='pyutil_comp',
author="xxx",
author_email="xxx",
version='1.0',
description='compile psutil',
packages=packages,
ext_modules=[init, common, compat, psaix, psbsd, pslinux, psosx, psposix, pssunos, pswindows],
)
###################################
zum kompilieren der .c habe ich denselben Code verwendet, bloß mit ext_modules=cythonize() für jede einzelne Datei.
Es wurde auch ein .pyd File erzeugt, welches ich in dem Pfad D:\testumgebung\code\psutil_comp hinterlegt habe. Beim ausführen erkennt das Script aber net_connections
nicht.
#############################################
import sys
sys.path.append(r'D:\testumgebung\code\psutil_comp')
import psutil
for port in psutil.net_connections(kind='tcp'):
if port.laddr[1] == 5112 and port.pid != 0:
print(port)
#############################################
Fehlermeldung:
Traceback (most recent call last):
File "D:\testumgebung\code\psutil_comp\check_psutil.py", line 6, in <module>
for port in psutil.net_connections(kind='tcp'):
AttributeError: module 'psutil' has no attribute 'net_connections'
Kann mir vielleicht jemand weiterhelfen?
Danke für eure Hilfe
Viele Grüße
Kompilieren von psutil in eine .pyd Datei
-
- User
- Beiträge: 12
- Registriert: Dienstag 5. November 2019, 16:07
Danke und viele Grüße
-
- User
- Beiträge: 12
- Registriert: Dienstag 5. November 2019, 16:07
Danke für die schnelle Antwort
Installieren kann ich nichts. Das dll soll vom Anwender einfach nur in einem Pfad abgelegt werden.
Es existiert eine Python Umgebung, auf die ich aber keinen Zugriff habe. Daher versuche ich diesen Weg.
Das dll soll ich aber zur Verfügung stellen.
Meinst du mit "vorwerfen", dass ich das dll in ein PYTHONPATH ablegen soll?
Wenn ja, dann kann ich das dem Anwender machen lassen.
Ich bin mit dll nicht sehr gut vertraut.
Installieren kann ich nichts. Das dll soll vom Anwender einfach nur in einem Pfad abgelegt werden.
Es existiert eine Python Umgebung, auf die ich aber keinen Zugriff habe. Daher versuche ich diesen Weg.
Das dll soll ich aber zur Verfügung stellen.
Meinst du mit "vorwerfen", dass ich das dll in ein PYTHONPATH ablegen soll?
Wenn ja, dann kann ich das dem Anwender machen lassen.
Ich bin mit dll nicht sehr gut vertraut.
Danke und viele Grüße
Naja, wenn der Python-Interpreter eine DLL von einem Ort, an dem du ihm gesagt hast, dass er da nach Python-Paketen schauen kann, dann kann er das auch gleich mit einem Paket machen. Ohne das vorher kompliziert zu einem PYD bauen zu muessen. PYTHONPATH ist eine Moeglichkeit. Du kannst auch dein Programm den sys.path modifizieren lassen, bevor das psutils importiert wird, zB durch ein Start-Skript. Etc pp.
-
- User
- Beiträge: 12
- Registriert: Dienstag 5. November 2019, 16:07
Ich muss mich entschuldigen für die späte Reaktion (Vorweihnachtszeit war stressig).
Ich hätte eine allgemeine Frage, die du mir vielleicht beantworten kannst.
Kurz zum Szenario:
Wir haben in Python 3.8.3 ein Bildverarbeitungs-Tool geschrieben.
Nun soll das Tool weitergegeben werden, damit die das Tool auch nutzen können.
Problem hierbei ist aber, dass die Kollegen andere Versionen verwenden (BSP: Python 3.6.0, oder Python 3.10.1)
Wir benötigen für das Tool aber die Version 3.8.3.
Gibt es eine Möglichkeit, dass Tool von uns unabhängig von der Version zu machen? (bspw. eine EXE)
Also quasi das Tool ablegen und einfach laufen lassen, ohne eine Installation von Python 3.8.3.
Weitere Info.
Der Anwender soll das Bildverarbeitungs-Tool über HTTP Anfragen steuern.
Wenn du mehr Infos brauchst, dann gebe ich dir die natürlich
Danke für deine bzw. eure Hilfe
Ich hätte eine allgemeine Frage, die du mir vielleicht beantworten kannst.
Kurz zum Szenario:
Wir haben in Python 3.8.3 ein Bildverarbeitungs-Tool geschrieben.
Nun soll das Tool weitergegeben werden, damit die das Tool auch nutzen können.
Problem hierbei ist aber, dass die Kollegen andere Versionen verwenden (BSP: Python 3.6.0, oder Python 3.10.1)
Wir benötigen für das Tool aber die Version 3.8.3.
Gibt es eine Möglichkeit, dass Tool von uns unabhängig von der Version zu machen? (bspw. eine EXE)
Also quasi das Tool ablegen und einfach laufen lassen, ohne eine Installation von Python 3.8.3.
Weitere Info.
Der Anwender soll das Bildverarbeitungs-Tool über HTTP Anfragen steuern.
Wenn du mehr Infos brauchst, dann gebe ich dir die natürlich
Danke für deine bzw. eure Hilfe
Danke und viele Grüße
Dazu gibt es Tools wie pyinstaller. Die buendeln unter der Haube den benoetigten Interpreter und alle Abhaengigkeiten, und fuehren das ganze dann aus. Kommt sich auch nicht in die Quere mit anderen Python-Interpretern auf dem System.
-
- User
- Beiträge: 12
- Registriert: Dienstag 5. November 2019, 16:07
Danke dir
Dann werde ich mir das mal anschauen!
Dann werde ich mir das mal anschauen!
Danke und viele Grüße
- DeaD_EyE
- User
- Beiträge: 1025
- Registriert: Sonntag 19. September 2010, 13:45
- Wohnort: Hagen
- Kontaktdaten:
Python 3.6 ist EOLProblem hierbei ist aber, dass die Kollegen andere Versionen verwenden (BSP: Python 3.6.0, oder Python 3.10.1)
Wir benötigen für das Tool aber die Version 3.8.3.
Python 3.8 hat noch Support bis Oktober 2024 und ist danach End of Life.
Ich würde darauf bestehen, die aktuellste Python-Version einzusetzen und die Begründung ist ganz einfach: bessere Fehlermeldungen und bessere Performance: https://www.phoronix.com/review/python-311-performance
Falls Python auf älteren Windows Versionen eingesetzt werden soll, muss man aber ältere Python-Versionen verwenden.
Hier eine Übersicht: https://pythondev.readthedocs.io/platforms.html#windows
Mit Windows 7 könnte man nur bis Python 3.8 einsetzen und bei Python 3.9 ist der Support von Windows 7 entfernt worden.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Python-Pakete kann man immer auch in einem Virtuellen Environment lokal installieren.
Daher würde ich Dein Python-Paket mit einem Requiements-File ausliefern, so dass jeder für seine Python-Version das passende VEnv erzeugen kann.
@DeaD_EyE: so einfach ist die Welt nicht. psutil-wheels existieren z.B. für Python 3.11 noch nicht.
Daher würde ich Dein Python-Paket mit einem Requiements-File ausliefern, so dass jeder für seine Python-Version das passende VEnv erzeugen kann.
@DeaD_EyE: so einfach ist die Welt nicht. psutil-wheels existieren z.B. für Python 3.11 noch nicht.
- DeaD_EyE
- User
- Beiträge: 1025
- Registriert: Sonntag 19. September 2010, 13:45
- Wohnort: Hagen
- Kontaktdaten:
Habe sie gerade heruntergeladenDeaD_EyE: so einfach ist die Welt nicht. psutil-wheels existieren z.B. für Python 3.11 noch nicht.
Code: Alles auswählen
[deadeye@nexus ~]$ pip wheel psutil
Collecting psutil
Downloading psutil-5.9.4-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (280 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 280.2/280.2 kB 4.7 MB/s eta 0:00:00
Saved ./psutil-5.9.4-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
[deadeye@nexus ~]$ pip install psutil-5.9.4-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Processing ./psutil-5.9.4-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Installing collected packages: psutil
Successfully installed psutil-5.9.4
[deadeye@nexus ~]$
Noch mal der Test, ob das Paket wirklich installiert worden ist:
Code: Alles auswählen
[deadeye@nexus ~]$ ipython
Python 3.11.1 (main, Dec 7 2022, 15:17:55) [GCC 12.2.0]
Type 'copyright', 'credits' or 'license' for more information
IPython 8.7.0 -- An enhanced Interactive Python. Type '?' for help.
In [1]: import psutil
In [2]: psutil.__version__
Out[2]: '5.9.4'
In [3]: psutil.__file__
Out[3]: '/home/deadeye/.pyenv/versions/3.11.1/lib/python3.11/site-packages/psutil/__init__.py'
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server