Развертывание пакета, созданного в Python 3.6 (Anaconda) в Python 2.7 - PullRequest
0 голосов
/ 28 июня 2019

Я создал код для извлечения данных из sharepoint, и он работает как очарование в моей локальной среде (Spyder Python 3.6).Но когда я пытаюсь развернуть его в производственной среде (Python 2.7.12), происходит сбой из-за отсутствующей криптографии пакета.Когда я пытаюсь добавить криптографию из github в библиотеку Python 2.7, в ней отсутствует файл _constant_time.Но когда я пытаюсь скопировать библиотечные файлы из anaconda (python 3.6) в производственную (python 2.7), файл _constant_time есть, но теперь он показывает, что не может импортировать ошибку lib.

Почему есть различия в файлах на github иАнаконда для библиотеки криптографии и как решить проблему?PS - я не могу изменить версию продукции с Python 2.7

import sys
from os.path import join as filejoin
from  os.path import dirname as file_dirname
from os.path import abspath as file_abspath



binPath=file_dirname(sys.argv[0])
CustomLibraryPath=filejoin(file_abspath(binPath+'/../..'),'CustomLibrary')
print(CustomLibraryPath)
sys.path.append(CustomLibraryPath) 


from requests_ntlm import HttpNtlmAuth
from shareplum import Site
import pandas as pd


username = """xxxxxxx"""
password = "xxxxxxxx"
site_url="xxxxxxx"


auth=HttpNtlmAuth(username, password)
site = Site(site_url, auth=auth)
sp_list = site.List('xxxxxxx')
data = sp_list.GetListItems("All Items")



df=pd.DataFrame(data)


print (df.head())

1 Ответ

0 голосов
/ 29 июня 2019

Простой ответ: криптография имеет несколько различных сборок между тем, что распознает ваш рабочий сервер, и тем, что вы пытались получить из Github (Например, у Anaconda есть несколько вариантов криптографии для построения 2.7.x, 15, если быть точным https://anaconda.org/anaconda/cryptography/files), что имеет смысл, потому что вы пытаетесь использовать два разных языка Python и заставляете их взаимодействовать, но они не понимают друг друга.

Думайте о своей проблеме так: представьте, что вы пытаетесь поговорить наАнглийский (или любой другой язык) с кем-то из 1800-х - технически вы двое говорите на одном языке, но вы не поймете друг друга так, как в течение двухсот лет, потому что язык развивалсяв сложности и значении. Для справки, Python 2.7.0 был выпущен в июле 2010 года, Python 3.7 был выпущен в 2017 году.

Существует сложный способ и более простой способ решения этой проблемы.

Более сложный путь: найти точную сборку Python для производствасервер, загрузите эту версию 2.7.x с Github или Anaconda.Затем удалите текущую версию криптографии, установите совместимую версию криптографии.Затем убедитесь, что Anaconda распознает новую ветвь, внедрите в нее свой код и он должен работать на вашем рабочем сервере.Вам нужно будет сделать несколько проб и ошибок, чтобы сделать это правильно, потому что другие пакеты могут иметь проблемы с зависимостью от вашей старой версии криптографии.Учитывая то, что вы представили в качестве решения, я уверен, что вы пытались это сделать.

Однако, чтобы избежать текущего разочарования, есть более простой способ: создать виртуальную среду для Python 2.7.x на вашем компьютере.соответствует производственному серверу.

Я бы специально использовал virtualenv, установил ваши пакеты pip, а затем реализовал ваш код через него.Таким образом, ваш код и рабочий сервер используют один и тот же Python.Я добавлю эту небольшую оговорку: вам может понадобиться переписать часть вашего кода, чтобы он заработал, потому что вы снова создали код, используя язык 2017 года, но общаетесь с Python 2010 года.

Ниже я расскажу вам, как настроить его, но я настоятельно рекомендую прочитать страницу виртуальной среды Python.org, чтобы подготовиться к будущему развитию (есть также множество статей и справочных руководств, но начнем систочник): (https://docs.python.org/3/tutorial/venv.html)

Для настройки виртуальной среды - откройте терминал и введите следующее:

$ mkdir project_folder
$ cd project_folder
$ virtualenv -p /usr/bin/python2.7 venv

После запуска вам нужно будет активироватьit:

$ source venv/bin/activate

Оттуда вы сможете использовать pip для захвата ваших модулей (я бы дважды проверил и удостоверился, что pip настроен для Python 2.7 -> Я не смог сделать это со сборкой один раз ипотратил часы, пытаясь выяснить, что я сделал не так). После того, как все ваши пакеты установлены, обычно «замораживают» текущий пакет средыs (удобно для других разработчиков проекта или для тех, кто хочет использовать его позже)

$ pip freeze > requirements.txt

Как только это будет сделано, вы можете скопировать код и внедрить в него свою виртуальную среду сборки своей программы.

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