2015-10-27 7 views
4

У меня есть простой скрипт python, который зависит от панд. Мне нужно упаковать его с помощью pex, чтобы он выполнялся без установки зависимостей.Пакет сценария python с pandas с использованием PEX

import sys 
import csv 
import argparse 
import pandas as pd 

class myLogic(): 
    def __init__(self): 
     pass   

    def loadData(self, data_file): 
     return pd.read_csv(data_file, delimiter="|") 

    #command line interaction interface 
    def processInputArguments(self,args): 

     parser = argparse.ArgumentParser(description="my logic") 

     #transactions file name 
     parser.add_argument('-td', 
          '--data', 
          type=str, 
          dest='data', 
          help='data file location' 
          )  


     options = parser.parse_args(args) 
     return vars(options) 


    def main(self): 
     options = self.processInputArguments(sys.argv[1:]) 

     data_file = options["data"] 

     data = self.loadData(data_file) 
     print data.head() 


if __name__ == '__main__': 
    ml = myLogic() 
    ml.main() 

Я пытаюсь использовать PEX, чтобы сделать это, так что я сделал следующее:

pex pandas -e myprogram.myLogic:main -o test1.pex 

Но я получаю эту ошибку при запуске сгенерированного PEX файла:

Traceback (most recent call last): 
    File ".bootstrap/_pex/pex.py", line 317, in execute 
    File ".bootstrap/_pex/pex.py", line 250, in _wrap_coverage 
    File ".bootstrap/_pex/pex.py", line 282, in _wrap_profiling 
    File ".bootstrap/_pex/pex.py", line 360, in _execute 
    File ".bootstrap/_pex/pex.py", line 418, in execute_entry 
    File ".bootstrap/_pex/pex.py", line 435, in execute_pkg_resources 
    File ".bootstrap/pkg_resources.py", line 2088, in load 
ImportError: No module named myLogic 

Я также попробовал упаковать с -c (переключатель для скрипта), используя следующую команду:

pex pandas -c myprogram.py -o test2.pex 

Но и получаю сообщение об ошибке:

Traceback (most recent call last): 
    File "/usr/local/bin/pex", line 11, in <module> 
    sys.exit(main()) 
    File "/usr/local/lib/python2.7/dist-packages/pex/bin/pex.py", line 509, in main 
    pex_builder = build_pex(reqs, options, resolver_options_builder) 
    File "/usr/local/lib/python2.7/dist-packages/pex/bin/pex.py", line 486, in build_pex 
    pex_builder.set_script(options.script) 
    File "/usr/local/lib/python2.7/dist-packages/pex/pex_builder.py", line 214, in set_script 
    script, ', '.join(self._distributions))) 
TypeError: sequence item 0: expected string, DistInfoDistribution found 

ответ

0

Единственный вариант, который не работал для меня до до сих пор является создание переводчика с PEX, который включает в панд, а затем доставки его с помощью сценария Python. Это может быть сделано следующим образом:

pex pandas -o my_interpreter.pex 

Но это не удается, если версия здание питон UCS4 и версия для работы с является UCS2

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