Ich habe nächsten Fall:

  1. Desktop-Anwendung mit Python + PySide
  2. Willst du PYD-Datei (mycore.pyd) in meiner Anwendung verwenden
  3. In der Datei mycore.pyx gibt es eine Abhängigkeit vom Padding-Modul
    • Dieses Padding-Modul ist bereits auf dem System installiert
  4. Ich erstelle Setup.py und konvertiere die PYX-Datei in die PYD-Datei, die ich in der Anwendung verwende

Was ich bekam:

  • Sobald ich meine Anwendung unter PyCharm => ausgeführt habe, ist alles in Ordnung
  • Wenn ich eine Anwendung mit dem PyInstaller-Ansatz erstelle und die Anwendung von cmd => ausführe, wird der Fehler "Kein benanntes Modul-Auffüllen (Anforderungen usw.)" angezeigt.

Beispiel für die Datei setup.py:

from distutils.core import setup
from Cython.Build import cythonize


extensions = ["mycore.pyx"]

setup(
    name='mycore',
    version='1.0',
    ext_modules=cythonize(extensions),
    #packages=['Padding'], - once tried => "error: package directory 'Padding' does not exist"
)

Irgendwelche Ideen oder Ratschläge wären toll!

UPDATE

Auch versuchte Variante mit setup_tools, auch ohne Erfolg:

from Cython.Build import cythonize
from setuptools import setup, find_packages, Extension, Command


setup(name='mycore',
      packages = find_packages(),
      version=1.0,
      include_package_data=True,
      platforms=['all'],
      ext_modules=[Extension("mycore", ['mycore.c'])],
      #extra_require = {"Padding"} - also nothing
      )
4
SpanishBoy 15 Aug. 2015 im 15:07

3 Antworten

Beste Antwort

Bitten Sie PyInstaller , das erforderliche Modul während des Erstellungsprozesses einzuschließen. Es scheint, dass der einfachste Weg dies mit dem {{ X0}} Argument:

--hidden-import=modulename
Nennen Sie ein importiertes Python -Modul, das in Ihrem Code nicht sichtbar ist. Das Modul wird so aufgenommen, als wäre es in einer import - Anweisung benannt. Diese Option kann mehrmals angegeben werden.

Fügen Sie daher beim Erstellen der Anwendung das folgende Argument hinzu:

--hidden-import=Padding


BEARBEITEN:

Versuchen Sie, alle erforderlichen Module (die einen Fehler auslösen) in eine separate *.py Datei anstatt in eine *.pyx \ *.pyd Datei zu importieren. Es ist eine hässliche Problemumgehung, könnte das Problem aber dennoch lösen.

Verwenden Sie für dieses Szenario möglicherweise eine __init__.py -Datei.

3
Yoel 20 Aug. 2015 im 13:19

Hier ist eine setup.py (https://github.com/robintiwari/) Die Datei django-me / blob / master / setup.py), die ich kürzlich erstellt habe, funktioniert und hatte ein ähnliches Problem. Ich würde @Sanju zustimmen, setuptools.find_packages () zu verwenden. Es hat das Problem für mich behoben.

1
nixdaemon 18 Aug. 2015 im 22:37

Ich vermute, dass das Problem darin besteht, dass PyInstaller keine durch Cython-Code importierten Pakete sieht und diese daher nicht in den Bundles-Anwendungen enthält.

Es muss eine Möglichkeit geben, PyInstaller anzuweisen, das Padding-Paket einzuschließen.

Ich kann dir nicht sagen wie - habe es nie benutzt, aber so gehst du mit py2exe und py2app um.

1
Chris Barker 19 Aug. 2015 im 20:44