2015-10-07 4 views
2

Я пытаюсь связать короткий скрипт python в один исполняемый файл. Я могу успешно запустить pyinstaller, используяImportError с Pyinstaller и Pandas

pyinstaller script.py 

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

C:\Users\...\Python\dist\script>script 
Traceback (most recent call last): 
    File "<string>", line 2, in <module> 
    File "c:\users\user\appdata\local\temp\pip-build-0pjuke\pyinstaller\PyInst 
aller\loader\pyimod03_importers.py", line 363, in load_module 
    File "c:\python27\lib\site-packages\pandas\__init__.py", line 13, in <module> 
    "extensions first.".format(module)) 
ImportError: C extension: lib not built. If you want to import pandas from the s 
ource directory, you may need to run 'python setup.py build_ext --inplace' to bu 
ild the C extensions first. 
script returned -1 

Вот импорт в моем сценарии:

import pandas 
from simple_salesforce import Salesforce 
from pandas import Series, DataFrame 
import vertica_python 
from StringIO import StringIO 
+1

Вы пытались запустить 'python setup.py build_ext --inplace' – DanHabib

+0

PyInstaller захватывает код pythas python, но не захватывает lib. Это означает, что когда код pandas работает (из «внутри» исполняемого файла) не может найти lib - поэтому он пытается быть полезным и предлагает вам его построить. Некоторые рабочие файлы для этого: https://github.com/pyinstaller/pyinstaller/issues/1580, но я не добился успеха сам. – Zero

ответ

-1

ошибка

ImportError: C extension: lib not built. 

Очевидно говорит вам бежать python setup.py build_ext --inplace. для создания расширений C

+0

сделал это, но получил ту же ошибку. – gwaldman13

+0

Ты работаешь в "virtualenv'? https://virtualenv.pypa.io/en/latest/ Использование одного из них позволит исправить проблему – DanHabib

+0

Привет @ gwaldman13, у меня такая же проблема, удалось ли вам это исправить? – Godsmith

2

Редактируйте специфицированный файл, чтобы добавить строки, показанные ниже, сразу после a = Analysis part. Затем построить используя --onefile флаг, например pyinstaller --onefile my_project.spec

a = Analysis(...)  

# Add the following 
def get_pandas_path(): 
    import pandas 
    pandas_path = pandas.__path__[0] 
    return pandas_path 


dict_tree = Tree(get_pandas_path(), prefix='pandas', excludes=["*.pyc"]) 
a.datas += dict_tree 
a.binaries = filter(lambda x: 'pandas' not in x[0], a.binaries) 

Причина этого необходимо, это PyInstaller захватывает панд код питона, но не захватывая LIB. Это означает, что когда код pandas работает (из «внутри» исполняемого файла) не может найти lib - поэтому он пытается быть полезным и предлагает вам его построить. Рабочий стол подробно описан github.com/pyinstaller/pyinstaller/issues/1580 - кажется, он может не работать для всех версий/операционных систем, так что вам повезло.

Смежные вопросы