小编bri*_*nts的帖子

使用tempfile编写csv临时文件

所以我正在为这个类写一个测试(编辑得更清楚):

class SpreadSheet(object):
    '''awesome docstring'''
    def __init__(self, filename):
        self.filename = filename
        self.table = []
        self.headers = []

        with open(self.filename) as csvfile:
            filereader = reader(csvfile, delimiter=',')
            for row in filereader:
                self.table.append(row)

    def create_headers(self, populations):
        ...code...

    def lookup_header(self, ltr):
        ...code...

    def write_header(self, targetfile):
        ...code...
Run Code Online (Sandbox Code Playgroud)

到目前为止看起来像这样:

class TestSpreadSheet(unittest.TestCase):
    @contextmanager
    def make_fake_csv(self, data):
        self.fake_namefile = tempfile.NamedTemporaryFile(delete=False)
        with open(self.fake_namefile, 'w') as fake_csv:
            fake_writer = csv.writer(fake_csv)
            fake_writer.writerows(data)
        yield self.fake_namefile.name
        os.unlink(self.fake_namefile.name)

    def setUp(self):
        self.headers = []
        self.table = [
            ['Col1', 'Col2', 'Col3', 'Col4', 'Col5', 'Col6', 'Col7', 'Col8'], …
Run Code Online (Sandbox Code Playgroud)

python csv unit-testing class

7
推荐指数
1
解决办法
1万
查看次数

为什么virtualenv从我的shell继承$ PYTHONPATH?

所以我在Ubuntu 14.04机器上将我的所有工具从python2迁移到python3.4.到目前为止,我已经完成了以下工作:

  1. 在我的zshrc中为我的用户使用python到python3
  2. 在系统本身上安装了pip3(但我只是将virtualenvs用于所有内容,所以我不会真正使用它)
  3. 改变了我的virtualenvwrapper"make"别名mkvirtualenv --python=/usr/bin/python3('workon'在下面被调用为'v')

现在好奇,你可以清楚地看到它,从virtualenv激活的环境运行python3仍然继承我的$ PYTHONPATH,它仍然为我所有的python2路径设置.这在我的virtualenv中安装/运行程序时会造成严重破坏,因为python3路径显示在旧的python2路径之后,因此python2模块首先在我的程序中导入.在启动virtualenv之前将我的$ PYTHONPATH取消为''修复此问题并且我的程序按预期启动.但我的问题是:

  1. 在virtualenvs中这个$ PYTHONPATH的继承是正常的吗?这不是打败了整个目的吗?
  2. 当python已经在内部处理它自己的路径时,为什么将$ PYTHONPATH设置为shell中的env-var?
  3. 我正确使用$ PYTHONPATH吗?我应该只在我的'zshrc'中设置它以仅列出我的个人添加物($ HOME/dev)而不是冗余的'/ usr/local/lib /'位置?
  4. 在调用它们之前,我可以非常轻松地导出备用python3路径以供我的virtualenvs使用,并在完成后重置它们,但这是解决此问题的最佳方法吗?
    ? echo $PYTHONPATH
    /usr/local/lib/python2.7/site-packages:/usr/local/lib/python2.7/dist-packages:/usr/lib/python2.7/dist-packages:/home/brian/dev

    brian@zeus:~/.virtualenvs
    ? python2
    Python 2.7.6 (default, Mar 22 2014, 22:59:56)
    [GCC 4.8.2] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import sys, pprint
    >>> pprint.pprint(sys.path)
    ['',
     '/usr/local/lib/python2.7/dist-packages/pudb-2013.3.4-py2.7.egg',
     '/usr/local/lib/python2.7/dist-packages/Pygments-1.6-py2.7.egg',
     '/usr/local/lib/python2.7/dist-packages/urwid-1.1.1-py2.7-linux-x86_64.egg',
     '/usr/local/lib/python2.7/dist-packages/pythoscope-0.4.3-py2.7.egg',
     '/usr/local/lib/python2.7/site-packages',
     '/usr/local/lib/python2.7/dist-packages',
     '/usr/lib/python2.7/dist-packages',
     '/home/brian/dev',
     '/usr/lib/python2.7',
     '/usr/lib/python2.7/plat-x86_64-linux-gnu',
     '/usr/lib/python2.7/lib-tk',
     '/usr/lib/python2.7/lib-old',
     '/usr/lib/python2.7/lib-dynload',
     '/usr/lib/python2.7/dist-packages/PILcompat',
     '/usr/lib/python2.7/dist-packages/gst-0.10',
     '/usr/lib/python2.7/dist-packages/gtk-2.0',
     '/usr/lib/pymodules/python2.7',
     '/usr/lib/python2.7/dist-packages/ubuntu-sso-client',
     '/usr/lib/python2.7/dist-packages/ubuntuone-client',
     '/usr/lib/python2.7/dist-packages/ubuntuone-storage-protocol',
     '/usr/lib/python2.7/dist-packages/wx-2.8-gtk2-unicode']
    >>>

    brian@zeus:~/.virtualenvs
    ? v py3venv
    (py3venv)
    brian@zeus:~/.virtualenvs …

python virtualenv zshrc pythonpath virtualenvwrapper

6
推荐指数
1
解决办法
5745
查看次数