KeyError:运行打包代码时为0L

Sto*_*rux 3 python packaging virtualenv setup.py python-2.7

我有脚本调用rra.py具有以下skelton结构:

usn=""
usnl=[]
from bs4 import BeautifulSoup 
import re
import asys
import glob
import os
import sys
import sys 

def inputIndex():
    #some processsing

def getval():
    #some processing

def parsehtml():
    #some processsing   

def ret():
    #some processing

def main():
    inputIndex()
    ret()
    parsehtml()
    getval()
    print "watsuup"
    asys.Compavg()
    asys.compSub()
    print "nearly done"
    return 0


if __name__ == '__main__':
    inputIndex()
    main()
    asys.Compavg()
        asys.compSub()
Run Code Online (Sandbox Code Playgroud)

asys.py在上面的脚本中导入了另一个脚本,rra.py其中包含以下内容.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
import statsmodels.api as sm
from numpy.random import randn
import matplotlib as mpl
import seaborn as sns

sns.set_color_palette("deep", desat=.6)
mpl.rc("figure", figsize=(8, 4))

def Compavg():
    data=Total()
    markMax=[]
    markAvg=[]
    N = 5
    ind = np.arange(N)    
    width = 0.35 
    fig = plt.figure()
    ax = fig.add_subplot(111)      
    markMax.extend((data["Total"].max(),data["Total.1"].max(),data["Total.2"].max(),data["Total.3"].max(),data["Total.4"].max()))
    markAvg.extend((data["Total"].mean(),data["Total.1"].mean(),data["Total.2"].mean(),data["Total.3"].mean(),data["Total.4"].mean()))
    rects1 = ax.bar(ind, markMax, width, color='black')
    rects2 = ax.bar(ind+width, markAvg, width, color='green')
    ax.set_xlim(-width,len(ind)+width)
    ax.set_ylim(0,120)
    ax.set_ylabel('Marks')
    ax.set_title('Max, Mean and Your Marks')
    xTickMarks = ['Subject'+str(i) for i in range(1,6)]
    ax.set_xticks(ind+width)
    xtickNames = ax.set_xticklabels(xTickMarks)
    plt.setp(xtickNames, rotation=10, fontsize=10)
    ax.legend( (rects1[0], rects2[0]), ('Max', 'Mean') )
    plt.show()
    print "finished reading 1"

def compSub():
    #max_data = np.r_[data["Total"]].max()
    #bins = np.linspace(0, max_data, max_data + 1)
    data=Total()
        print data['Total']
    plt.hist(data['Total'],linewidth=0, alpha=.7)
    plt.hist(data['Total.1'],linewidth=0,alpha=.7)
    plt.hist(data['Total.2'],linewidth=0,alpha=.7)
    plt.hist(data['Total.3'],linewidth=0,alpha=.7)
    plt.hist(data['Total.4'],linewidth=0,alpha=.7)
    plt.title("Total marks Histogram")
    plt.xlabel("Value")
    plt.ylabel("Frequency")
    plt.show()
    print "finished reading 2"

def Total():
    print "going to read"
    data=pd.read_csv("output11cs.csv")
    df3=data[['Total','Total.1','Total.2','Total.3','Total.4','Total.5','Total.6','Total.7']]
    data["Main Total"]=df3.sum(axis=1)
    data = data.dropna()
    data.reset_index(drop=True)
    return data
    #compSub()
    #Compavg()
Run Code Online (Sandbox Code Playgroud)

当我执行rra.py外部virtualenv(甚至在virtualenv内)时,使用python rra.py它执行完美并绘制图形和直方图,如下所示asys.py.

然后我创建了一个'setup.py'文件来打包它,如下所示:

from ez_setup import use_setuptools
use_setuptools()
from setuptools import setup, find_packages
from setuptools.command.test import test as TestCommand
import vturra
import sys
class PyTest(TestCommand):
    def finalize_options(self):
        TestCommand.finalize_options(self)
        self.test_args = []
        self.test_suite = True

    def run_tests(self):
        import pytest
        errcode = pytest.main(self.test_args)
        sys.exit(errcode)

setup(name="vturra",
    version=vturra.__version__,
    license='Apache Software License',
    tests_require=['pytest'],
    install_requires=['matplotlib>=1.2.1',
                      'pandas',
                      'numpy',
                      'scipy',
                      'beautifulsoup',
                      'requests',
                      'patsy',
                      'seaborn==0.2.1',
                      'BeautifulSoup4'
                     ],
    cmdclass={'test': PyTest},
    description="Downloads results from VTU website and analyzes the result",
    long_description=open('README.md').read(),
    author="Muhammed Thaha",
    author_email='mthaha1989@gmail.com',
    download_url='https://github.com/stormvirux/vturra',
    packages=find_packages(exclude='tests'),
    package_data={'vturra': ['data/*.xml']},
    include_package_data=True,
    platforms='any',
    test_suite='vturra.test.test_vturra',
    classifiers = [
        'Programming Language :: Python',
        'Development Status :: 1 - Beta',
        'Natural Language :: English',
        'Environment :: Web Environment',
        'Intended Audience :: Developers',
        'License :: OSI Approved :: Apache Software License',
        'Operating System :: OS Independent',
        'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
        ],
    extras_require={
        'testing': ['pytest'],
    },
    entry_points={
        "console_scripts": [
            "vturra=vturra.rra:main"
            #"pip%s=pip:main" % sys.version[:1],
            #"pip%s=pip:main" % sys.version[:3],
        ],
    }
)
Run Code Online (Sandbox Code Playgroud)

我使用python setup.py installin 安装了包virtualenv,一切都安装得很好.现在,当我执行包时,vturra我收到以下错误:

Traceback (most recent call last):
  File "asys.py", line 65, in <module>
    compSub()
  File "asys.py", line 46, in compSub
    plt.hist(data['Total'],linewidth=0, alpha=.7)
  File "/home/storm/Documents/lol/local/lib/python2.7/site-packages/matplotlib/pyplot.py", line 2827, in hist
    stacked=stacked, **kwargs)
  File "/home/storm/Documents/lol/local/lib/python2.7/site-packages/matplotlib/axes.py", line 8249, in hist
    if isinstance(x, np.ndarray) or not iterable(x[0]):
  File "/home/storm/Documents/lol/local/lib/python2.7/site-packages/pandas/core/series.py", line 491, in __getitem__
    result = self.index.get_value(self, key)
  File "/home/storm/Documents/lol/local/lib/python2.7/site-packages/pandas/core/index.py", line 1032, in get_value
    return self._engine.get_value(s, k)
  File "index.pyx", line 97, in pandas.index.IndexEngine.get_value (pandas/index.c:2661)
  File "index.pyx", line 105, in pandas.index.IndexEngine.get_value (pandas/index.c:2476)
  File "index.pyx", line 149, in pandas.index.IndexEngine.get_loc (pandas/index.c:3215)
  File "hashtable.pyx", line 382, in pandas.hashtable.Int64HashTable.get_item (pandas/hashtable.c:6450)
  File "hashtable.pyx", line 388, in pandas.hashtable.Int64HashTable.get_item (pandas/hashtable.c:6394)
KeyError: 0L
Run Code Online (Sandbox Code Playgroud)

但是,如果我注释掉的函数调用asys.compSub()main()它的工作没有任何错误.

更新 当作为独立脚本执行时,该功能可以很好地工作,virtualenv但在内部virtualenv会出现上述错误.我相信这是一个问题virtualenv呢?

Sto*_*rux 7

终于解决了.这是pandas和最新版本之间的问题matplotlib.全球系统熊猫版本0.10与virtualenv 进行了比较0.13.0.所以我降级为0.10.0virtualenv.

现在它的工作完美.

基本上它与matplotlib和pandas的API不兼容> = 0.13.plt.hist系列目前将面临这个问题.

所以要么使用 data['Total.1'].hist()

或传递价值观 plt.hist(data['Total.1'].values,....)

或者将熊猫降级到低于的版本0.13.