Pandas 开发工作流程:conda 和构建 C 扩展
Pandas development workflow: conda and building C extensions
我目前正在为 Pandas 核心编写一些代码,我想知道我的工作流程是否正确。
当 Travis CI 实例针对 Python 的不同版本进行测试时,我将 conda 设置为在本地的不同版本之间切换,这样我就可以查看测试套件是通过还是失败。
但每次我在环境之间切换时,我得到:
ERROR: Failure: ImportError (C extension: libpython2.6.so.1.0: cannot open shared object file: No such file or directory not built. If you want to import pandas from the source directory, you may need to run 'python setup.py build_ext --inplace' to build the C extensions first.)
当我这样做时 python setup.py build_ext --inplace
我得到:
/home/some_user/anaconda/lib/python2.7/site-packages/setuptools-17.1.1-py2.7.egg/setuptools/dist.py:294: UserWarning: The version specified ('0.16.2-134-g84d6eba') is an invalid version, this may not work as expected with newer versions of setuptools, pip, and PyPI. Please see PEP 440 for more details.
running build_ext
skipping 'pandas/index.c' Cython extension (up-to-date)
skipping 'pandas/src/period.c' Cython extension (up-to-date)
skipping 'pandas/algos.c' Cython extension (up-to-date)
skipping 'pandas/lib.c' Cython extension (up-to-date)
skipping 'pandas/tslib.c' Cython extension (up-to-date)
skipping 'pandas/parser.c' Cython extension (up-to-date)
skipping 'pandas/hashtable.c' Cython extension (up-to-date)
skipping 'pandas/src/sparse.c' Cython extension (up-to-date)
skipping 'pandas/src/testing.c' Cython extension (up-to-date)
skipping 'pandas/msgpack.cpp' Cython extension (up-to-date)
因此,根据@Jeff 对 的评论,我使用以下方法重建扩展:
python setup.py build_ext --inplace --force
一切正常。但是构建需要好几分钟才能 运行,感觉我做错了什么。 (它当然没有提到必须在 Contributing to Pandas 指南中强制重建。
所以我做错了什么,还是这就是它的工作方式?
您不能在同一个 space 中构建多个版本。您需要执行以下操作之一:
将克隆的目录放入 conda
目录本身。例如。如果你有 pandas2.6
,那么你可以(如果你安装了 miniconda/anaconda,你的路径可能会有所不同),到 ~/minicona/envs/pandas2.6
然后克隆 pandas
和 python setup.py build_ext --inplace
并访问本地
使用python setup.py build
。如果你的克隆目录是~/pandas
。这会将不同版本的构建放在 ~/pandas/builds/.....
中。这样做的缺点是您实际上必须将事物指向 运行 它们,例如nosetests ~/pandas/builds/....../pandas/tests/test_series.py
例如。此外,每次您想要进行更改时都要重新构建(但由于已经构建了 c 扩展,这通常非常快)。
我目前正在为 Pandas 核心编写一些代码,我想知道我的工作流程是否正确。
当 Travis CI 实例针对 Python 的不同版本进行测试时,我将 conda 设置为在本地的不同版本之间切换,这样我就可以查看测试套件是通过还是失败。
但每次我在环境之间切换时,我得到:
ERROR: Failure: ImportError (C extension: libpython2.6.so.1.0: cannot open shared object file: No such file or directory not built. If you want to import pandas from the source directory, you may need to run 'python setup.py build_ext --inplace' to build the C extensions first.)
当我这样做时 python setup.py build_ext --inplace
我得到:
/home/some_user/anaconda/lib/python2.7/site-packages/setuptools-17.1.1-py2.7.egg/setuptools/dist.py:294: UserWarning: The version specified ('0.16.2-134-g84d6eba') is an invalid version, this may not work as expected with newer versions of setuptools, pip, and PyPI. Please see PEP 440 for more details.
running build_ext
skipping 'pandas/index.c' Cython extension (up-to-date)
skipping 'pandas/src/period.c' Cython extension (up-to-date)
skipping 'pandas/algos.c' Cython extension (up-to-date)
skipping 'pandas/lib.c' Cython extension (up-to-date)
skipping 'pandas/tslib.c' Cython extension (up-to-date)
skipping 'pandas/parser.c' Cython extension (up-to-date)
skipping 'pandas/hashtable.c' Cython extension (up-to-date)
skipping 'pandas/src/sparse.c' Cython extension (up-to-date)
skipping 'pandas/src/testing.c' Cython extension (up-to-date)
skipping 'pandas/msgpack.cpp' Cython extension (up-to-date)
因此,根据@Jeff 对
python setup.py build_ext --inplace --force
一切正常。但是构建需要好几分钟才能 运行,感觉我做错了什么。 (它当然没有提到必须在 Contributing to Pandas 指南中强制重建。
所以我做错了什么,还是这就是它的工作方式?
您不能在同一个 space 中构建多个版本。您需要执行以下操作之一:
将克隆的目录放入
conda
目录本身。例如。如果你有pandas2.6
,那么你可以(如果你安装了 miniconda/anaconda,你的路径可能会有所不同),到~/minicona/envs/pandas2.6
然后克隆pandas
和python setup.py build_ext --inplace
并访问本地使用
python setup.py build
。如果你的克隆目录是~/pandas
。这会将不同版本的构建放在~/pandas/builds/.....
中。这样做的缺点是您实际上必须将事物指向 运行 它们,例如nosetests ~/pandas/builds/....../pandas/tests/test_series.py
例如。此外,每次您想要进行更改时都要重新构建(但由于已经构建了 c 扩展,这通常非常快)。