Я знаю, что здесь и вокруг inte rnet есть несколько вопросов относительно параллельных python сборок с использованием setuptools. Тем не менее, никто не обеспечивает решение. Стоит также упомянуть, что большинству, с чем я сталкиваюсь, больше 5 лет.
Кажется, я могу добиться желаемого распараллеливания во время установки через:
>> python setup.py build -j 4
>> python setup.py install
Но это не работает для редактируемые установки, т.е. для разработки. Редактируемая установка требует вызова python setup.py develop
вместо 2 вышеуказанных команд. Однако для develop
флаг -j
отсутствует. Если я пытаюсь вызвать его после сборки, например,
>> python setup.py build -j 4
>> python setup.py develop
, я получаю сообщение об ошибке:
running develop
running egg_info
creating My_Package.egg-info
writing My_Package.egg-info/PKG-INFO
writing dependency_links to My_Package.egg-info/dependency_links.txt
writing top-level names to My_Package.egg-info/top_level.txt
writing manifest file 'My_Package.egg-info/SOURCES.txt'
reading manifest file 'My_Package.egg-info/SOURCES.txt'
writing manifest file 'My_Package.egg-info/SOURCES.txt'
running build_ext
copying build/lib.linux-x86_64-3.7_my_package_ext/_enums.cpython-37m-x86_64-linux-gnu.so _my_package_ext
error: could not create _my_package_ext/_enums.cpython-37m-x86_64-linux-gnu.so': No such file or directory
Кроме того, рекомендуется для использования pip install -e . --user
вместо python setup.py develop
в любом случае. Если я пытаюсь вызвать это после параллельной сборки, я получаю:
>> python setup.py build -j 4
>> pip install -e . --user
Running setup.py (path:/package/setup.py) egg_info for package from file:///package
Running command python setup.py egg_info
running egg_info
writing My-Package.egg-info/PKG-INFO
writing dependency_links to My-Package.egg-info/dependency_links.txt
writing top-level names to My-Package.egg-info/top_level.txt
reading manifest file 'My-Package.egg-info/SOURCES.txt'
writing manifest file 'My-Package.egg-info/SOURCES.txt'
Source in /package has version 0.0, which satisfies requirement My-Package==0.0 from file:///package
Installing collected packages: My-Package
Running setup.py develop for My-Package
Running command /usr/bin/python3 -c "import setuptools, tokenize;__file__='/package/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" develop --no-deps --user --prefix=
running develop
running egg_info
writing My-Package.egg-info/PKG-INFO
writing dependency_links to My-Package.egg-info/dependency_links.txt
writing top-level names to My-Package.egg-info/top_level.txt
reading manifest file 'My-Package.egg-info/SOURCES.txt'
writing manifest file 'My-Package.egg-info/SOURCES.txt'
running build_ext
copying build/lib.linux-x86_64-3.6/_my_package_ext/_enums.cpython-36m-x86_64-linux-gnu.so -> _my_package_ext
error: could not create '_my_package_ext/_enums.cpython-36m-x86_64-linux-gnu.so': No such file or directory
Cleaning up...
Command "/usr/bin/python3 -c "import setuptools, tokenize;__file__='/package/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" develop --no-deps --user --prefix=" failed with error code 1 in /package/
Кто-нибудь знает хороший способ получить параллельную сборку в редактируемой установке? В идеале это были бы формулировки pip install -e ...
, но на самом деле все было бы лучше, чем ничего.