【问题标题】:Deploying a package created in Python 3.6 (Anaconda) in Python 2.7在 Python 2.7 中部署在 Python 3.6 (Anaconda) 中创建的包
【发布时间】:2019-06-28 18:02:03
【问题描述】:

我创建了一个代码来从 sharepoint 中提取数据,它在我的本地环境(Spyder Python 3.6)上就像魅力一样。 但是当我尝试在生产环境(Python 2.7.12)上部署它时,由于缺少包加密而失败。 当我尝试将密码学从 github 添加到 Python 2.7 库时,它会丢失文件 _constant_time。 但是当我尝试将库文件从 anaconda (python 3.6 ) 复制到生产 (python 2.7) 时,_constant_time 文件在那里,但它现在显示 cannot import lib 错误。

为什么 github 和 anaconda 上的密码库文件存在差异以及如何解决该问题? 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())

【问题讨论】:

    标签: python python-3.x python-2.7 anaconda


    【解决方案1】:

    简单的答案:密码学在您的生产服务器可以识别的内容和您尝试从 Github 获取的内容之间有几个不同的构建(例如,Anaconda 有几个 2.7.x 的密码学构建选项,准确地说是 15 个https://anaconda.org/anaconda/cryptography/files ) 这是有道理的,因为您尝试使用两种不同的 Python 语言并强制它们进行交互,但它们彼此不理解。

    这样想你的问题:想象一下试图用英语(或任何语言)与 1800 年代的人交谈 - 技术上你们两个说的是同一种语言,但你不会因为语言在复杂性和意义方面已经演变,所以在 200 年的过程中无法相互理解。作为参考,Python 2.7.0 于 2010 年 7 月发布,Python 3.7 于 2017 年发布。

    解决这个问题有一个困难的方法和一个简单的方法。

    更难的方法是:找到生产服务器的确切 Python 版本,从 Github 或 Anaconda 下载 2.7.x 版本。然后删除你当前的密码学版本,安装兼容的密码学版本。然后确保 Anaconda 能够识别新分支,将其实现为您的代码,它应该可以在您的生产服务器上运行。您必须进行一些试验和错误才能使其正确,因为其他软件包可能与您的旧版本密码学存在依赖性问题。鉴于您提出的解决方案,我相信您已经尝试过。

    但是,为了避免您目前的挫败感,有一种更简单的方法:在您的机器上为 Python 2.7.x 构建一个与生产服务器匹配的虚拟环境。

    我会专门使用 virtualenv,pip 安装你的包,然后通过它实现你的代码。这样你的代码和生产服务器使用相同的 Python。我要补充一点:您可能需要重写一些代码才能使其正常工作,因为您再次使用 2017 年的语言构建代码,但您正在使用 2010 年的 Python。

    我会在下面为您介绍如何设置它,但我强烈建议您阅读 Python.org 虚拟环境页面,以了解未来的开发(这里有大量文章和参考指南)但从源头开始):(https://docs.python.org/3/tutorial/venv.html

    要设置虚拟环境 - 拉起终端并输入以下内容:

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

    一旦运行,您需要激活它:

    $ source venv/bin/activate
    

    从那里你应该能够使用 pip 来获取你的模块(我会仔细检查并确保为 Python 2.7 设置了 pip -> 我没有通过一次构建来做到这一点,并且花了几个小时试图弄清楚我做错了)。 安装完所有包后,习惯上会“冻结”当前环境包(方便项目中的其他开发人员或以后想使用它的任何人)

    $ pip freeze > requirements.txt
    

    完成后,您可以复制代码并在其中实现您的程序的虚拟环境构建。

    【讨论】:

      猜你喜欢
      • 2018-07-20
      • 2017-11-04
      • 2017-10-29
      • 2020-12-05
      • 1970-01-01
      • 2018-08-06
      • 1970-01-01
      • 2018-04-10
      • 1970-01-01
      相关资源
      最近更新 更多