Setting up and using your development environment

Building in-place

对于开发,您可以设置一个就地构建,以使对.py文件的更改生效,无需重建。首先,运行:

$ python setup.py build_ext -i

这允许你从repo基目录只导入就地构建的NumPy 如果你想要就地构建在基本目录外部可见,那么你需要将PYTHONPATH环境变量指向此目录。某些IDE(例如Spyder)具有管理PYTHONPATH的实用程序。在Linux和OSX上,您可以运行命令:

$ export PYTHONPATH=$PWD

和在Windows上:

$ set PYTHONPATH=/path/to/numpy

现在,在NumPy中编辑Python源文件允许您立即测试和使用您的更改(在.py文件),只需重新启动解释器。

请注意,在repo base dir之外执行inplace build的另一种方法是使用python setup.py 开发不是调整PYTHONPATH,它会在您的网站软件包中安装.egg-link文件,并调整easy-install.pth ,所以它更持久(和神奇)的操作。

Other build options

可以使用numpy.distutils-j选项进行并行构建;有关详细信息,请参阅Parallel builds

要在site-packages中安装NumPy的开发版本,请使用python setup.py 安装 t5 > - user

类似的方法是原位构建和使用PYTHONPATH,但在源代码树外部使用:

$ python setup.py install --prefix /some/owned/folder
$ export PYTHONPATH=/some/owned/folder/lib/python3.4/site-packages

Using virtualenvs

一个常见的问题是“如何在发布的版本中并行地设置NumPy的开发版本,以用于我的工作/研究?

实现这一点的一个简单的方法是通过使用二进制安装程序或pip例如在site-packages中安装发布的版本,并在virtualenv中设置开发版本。首先安装virtualenv(可选使用virtualenvwrapper),然后使用以下命令创建virtualenv(此处命名为numpy-dev)

$ virtualenv numpy-dev

Now, whenever you want to switch to the virtual environment, you can use the command source numpy-dev/bin/activate, and deactivate to exit from the virtual environment and back to your previous shell.

Running tests

除了使用runtests.py,还有多种方法来运行测试。在解释器中,测试可以这样运行:

>>> np.test()
>>> np.test('full')   # Also run tests marked as slow
>>> np.test('full', verbose=2)   # Additionally print test name/file

或者从命令行类似的方式:

$ python -c "import numpy as np; np.test()"

测试也可以使用nosetests numpy运行,但是没有找到NumPy特定的nose标记为KnownFailure的测试将报告为错误。

运行单个测试文件可能很有用;它比运行整个测试套件或整个模块(例如:np.random.test())要快得多。这可以通过:

$ python path_to_testfile/test_file.py

这也需要额外的参数,例如--pdb,当测试失败或引发异常时,会将您拖入Python调试器。

还支持使用tox运行测试。例如,要构建NumPy并使用Python 3.4运行测试套件,请使用:

$ tox -e py34

有关运行和编写测试的更多信息,请参阅https://github.com/numpy/numpy/blob/master/doc/TESTS.rst.txt

注意:不要从您的numpy git仓库的根目录运行测试,这将导致奇怪的测试错误。

Rebuilding & cleaning the workspace

在对编译代码进行更改之后重新构建NumPy可以使用与之前使用的相同的构建命令来完成 - 只有重新构建已更改的文件。执行完全构建(有时是必要的)需要先清洁工作区。执行此操作的标准方法是(注意:删除任何未提交的文件!):

$ git clean -xdf

当你想丢弃所有的更改并返回到repo中的最后一个提交时,使用以下方法之一:

$ git checkout .
$ git reset --hard

Debugging

另一个常见问题是“如何调试NumPy中的C代码?”。最简单的方法是首先编写一个Python脚本,调用要调试的C代码。例如mytest.py

from numpy import linspace
x = np.arange(5)
np.empty_like(x)

现在,你可以运行:

$ gdb --args python runtests.py -g --python mytest.py

然后在调试器中:

(gdb) break array_empty_like
(gdb) run

执行现在将停止在相应的C函数,你可以像往常一样通过它。通过安装gdb的Python扩展(通常是Linux上的默认),可以使用许多有用的Python特定命令。例如,要看看你在Python代码中的位置,使用py-list有关更多详细信息,请参阅DebuggingWithGdb

你可以使用你最喜欢的替代调试器,而不是普通的gdb使用参数runtests.py -g - python mytest.py

强烈建议使用构建有调试支持的Python(在Linux发行版通常打包为python-dbg)构建NumPy。

Understanding the code & getting started

更好地理解代码基础的最好的策略是选择你想要改变的东西,并开始阅读代码来弄清它是如何工作的。如有疑问,您可以在邮件列表上提出问题。这是完全没有问题,如果你的请求不完美,社区总是乐意提供帮助。作为一个志愿者项目,事情有时会被丢弃,如果一些事情在没有回应的情况下持续大约两到四个星期,我们可以告诉我们。

所以,继续选择一些东西,恼人或困惑你对numpy,实验的代码,挂起讨论或通过参考文档,尝试解决它。事情会落到位,很快你会对整个项目有一个很好的理解。祝你好运!