Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
424 views
in Technique[技术] by (71.8m points)

python - Install package which has setup_requires from local source distributions

Take the following trivial package which contains setup_requires:

from setuptools import setup
setup(name='my_package', setup_requires=['cython'])

Assuming I have done the following to build it to a source distribution:

$ python setup.py sdist

And downloaded the source distribution for Cython

$ pip install --download ./dist/ --no-use-wheel Cython

So now I have:

$ ls dist/
my_package-0.0.0.tar.gz
Cython-0.21.1.tar.gz

What I'd like to be able to do is install the package on a network-isolated machine using some combination of --find-links, etc.

I'd imagine I could do something like

pip install --no-index --find-links="file:///$(pwd)/dists" dist/my_package-0.0.0.tar.gz

However I get an error that looks like this:

No local packages or download links found for cython (Full text here: http://paste.pound-python.org/show/IxmzEEfQ5yZRU45i2FBM/ )

What I've tried unsuccessfully:

Setting the following

[easy_install]
allow_hosts = ''
find_links = file:///$(pwd)/emr-sdists

in:

/usr/lib/python2.6/distutils/distutils.cfg
~/.pydistutils.cfg
./setup.cfg

I'm currently using the --net none setting of docker to help debug this if it makes it easier for you to get to a reproduction.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

The problem (besides that your --find-links is typoed as dists instead of dist) is that the first thing pip does to install a package is run python setup.py egg_info, without bothering to pass along any of the package-finding information. Pip doesn't actually want setuptools to install any dependencies! It wants setuptools to spit out the dependencies as egg_info so pip can read them and go fetch them itself.

But dependencies in setup_requires are always installed on any invocation of setup.py. I'd go so far as to say that setup_requires is completely incompatible with pip.

The alternative is... to just put your build code in the build step. Pip won't try to build your package until all of its dependencies are installed anyway.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...