Виртуальная среда Python 3 - несуществующие пакеты - PullRequest
0 голосов
/ 30 мая 2018

Я пытаюсь создать виртуальную среду, чтобы ограничить размер создаваемого exe-файла.Однако, когда я создаю виртуальную среду, кажется, что она все еще добавляет пакеты, которые я не установил в указанной среде.

Я попытался сделать очень маленький тестовый файл, в который я импортировал numpy:

import numpy as np
A = np.array([0,0,1])
print(A)

Когда я создаю свою виртуальную среду и запускаю сценарий из cmd, он получает сообщение, что numpy не установлен в среде, но когда я превращаю тестовый сценарий в исполняемый файл с помощью pyinstaller, каким-то образом получается numpy.В любом случае все это смешалось ... У меня есть вся процедура cmd:

Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\Users\MRCH>Virtualenv test_env
Using base prefix 'c:\\anaconda3'
New python executable in C:\Users\MRCH\test_env\Scripts\python.exe
Installing setuptools, pip, wheel...done.

C:\Users\MRCH>test_env\scripts\activate

(test_env) C:\Users\MRCH\dist>pip list
Package    Version
---------- -------
pip        10.0.1
setuptools 39.2.0
wheel      0.31.1

(test_env) C:\Users\MRCH>python test.py
Traceback (most recent call last):
  File "test.py", line 1, in <module>
    import numpy as np
ModuleNotFoundError: No module named 'numpy'

(test_env) C:\Users\MRCH>pyinstaller test.py -y -F
454 INFO: PyInstaller: 3.3.1
...
132266 INFO: Appending archive to EXE C:\Users\MRCH\dist\test.exe
132473 INFO: Building EXE from out00-EXE.toc completed successfully.

(test_env) C:\Users\MRCH>cd dist

(test_env) C:\Users\MRCH\dist>test.exe
[0 0 1]

(test_env) C:\Users\MRCH\dist>

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Вот краткое описание решения.

1) Pyinstaller в виртуальной среде Я обнаружил, что когда я создаю виртуальную среду, первое, что я должен сделать, это установить Pyinstaller,Если я этого не сделаю, он включает в себя тонну пакетов из-за пределов виртуальной среды.(Я не уверен, что это именно то, что происходит на самом деле, но это действительно решило мою проблему, поэтому, если у кого-то есть какие-либо идеи по этому поводу, не стесняйтесь вносить свой вклад).

После установки Pyinstaller я устанавливаюдля скрипта требуются пакеты.

. В этом случае .exe по-прежнему был достаточно большим, хотя использовался только numpy.

2) Anaconda VS clean Python Iустановил чистый Python 32bit и создал виртуальную среду, независимую от Anaconda.Таким образом, многие пакеты из среды conda были опущены, и мне удалось уменьшить размер файла примерно до 1/10 от исходного размера

UPX При сжатии файла через UPX с помощьюНа чистом питоне я обнаружил множество ImportError: DLL load failed ошибок, которые я обнаружил из-за UPX .При запуске Pyinstaller без UPX ошибок не возникает, и все работает без сбоев.

0 голосов
/ 30 мая 2018

Из документов pyinstaller pyinstaller анализирует операторы импорта для сбора зависимостей.

Похоже, ваши проблемы связаны с поиском пакетов pyinstaller в каталоге anaconda.Вам необходимо либо явно исключить пакеты, например так:

pyinstaller test.py -y -F --exclude numpy

, либо создать новую виртуальную среду, отдельную от anaconda, например , этот ответ предлагает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...