์๋ ํ์ธ์,
".htaccess" ํ์ผ๋ก ๊ฐ์ธ์ฉ Python ์ธ๋ฑ์ค ์ ์ฅ์๋ฅผ ๋ณดํธํ๊ณ ์ถ์ต๋๋ค.
pip
๋ฅผ ์ฌ์ฉํ์ฌ ์ด ์ ์ฅ์์์ ์ผ๋ถ ํจํค์ง๋ฅผ ์ค์นํ๋ฉด ๋ค์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
Getting page http://pypi.is-webdesign.com/simple/
Could not fetch URL http://pypi.is-webdesign.com/simple/: HTTP Error 401: Unauthorized
pip ์ ํจ๊ป ๋ก๊ทธ์ธ/๋น๋ฐ๋ฒํธ ๋งค๊ฐ๋ณ์๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํ ์ ์์ต๋๊น?
ํ์ด ์ด ๊ธฐ๋ฅ์ ์ง์ํ์ง ์์ต๋๊น? ๊ทธ๋ ์ง ์๋ค๋ฉด ๊ณํ๋ ๊ฒ์ ๋๊น?
๋ฌธ์ ์ธ์ฌ,
์คํ
ํ
pip๋ URLOpener๋ฅผ ํตํด ๊ธฐ๋ณธ ์ธ์ฆ์ ์ง์ํฉ๋๋ค.
http://bitbucket.org/ianb/pip/src/tip/pip/download.py#cl -67
http://username:password@server/whatever/ ์ ๊ฐ์ URL์ ์ฌ์ฉ
Original Comment By: Jannis Leidel
0.8.1 pip ๋ฒ์ ์ผ๋ก ๋ค์์ ์ํํ ์ ์์ต๋๋ค.
pip install -f http://username:[email protected]/simple/ my_package
์ด ๊ธฐ๋ฅ์ด ๋ฌธ์ํ๋์ด ์๋์ง ์ฌ๋ถ๋ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
์ผ๋จ ๋ณด๊ฒ ์ต๋๋ค.
์๋ถ, ์คํ ํ
Original Comment By: Stรฉphane Klein
Jannis, ๋ง์ํ์ ๋๋ก ์๋ํ์ง๋ง HTTPS๋ฅผ ์ฌ์ฉํ ๋ ์๋ํ์ง ์์์ต๋๋ค.
๋๊ตฐ๊ฐ ๋๋ฅผ ์ํด ํ์ธํ ์ ์์ต๋๊น? ์๋ ค์ง ๋ฒ๊ทธ์ ๋๊น?
๊ฐ์ฌ ํด์! :-)
Original Comment By: Guilherme Gondim
https์์ ์๋ํ์ง ์๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค. ๋ค์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
Traceback (most recent call last):
File "/home/ian/.virtualenvs/test/lib/python2.6/site-
packages/pip-0.6.3-py2.6.egg/pip/basecommand.py", 115ํ, ๋ฉ์ธ
self.run(options, args)
File "/home/ian/.virtualenvs/test/lib/python2.6/site-
packages/pip-0.6.3-py2.6.egg/pip/commands/install.py", 155ํ, ์คํ ์ค
requirement_set.install_files(finder, force_root_egg_info=self.bundle,
๋ฒ๋ค=self.bundle)
File "/home/ian/.virtualenvs/test/lib/python2.6/site-
packages/pip-0.6.3-py2.6.egg/pip/req.py", 823ํ, install_files
url = finder.find_requirement(req_to_install, upgrade=self.upgrade)
File "/home/ian/.virtualenvs/test/lib/python2.6/site-
packages/pip-0.6.3-py2.6.egg/pip/index.py", 55ํ, find_requirement
page = self._get_page(main_index_url, req)
File "/home/ian/.virtualenvs/test/lib/python2.6/site-
packages/pip-0.6.3-py2.6.egg/pip/index.py", 282ํ, _get_page
return HTMLPage.get_page(link, req, cache=self.cache)
File "/home/ian/.virtualenvs/test/lib/python2.6/site-
packages/pip-0.6.3-py2.6.egg/pip/index.py", get_page์ 363ํ
resp = urllib2.urlopen(url)
File "/usr/lib/python2.6/urllib2.py", line 126, in urlopen
return _opener.open(url, data, timeout)
File "/usr/lib/python2.6/urllib2.py", line 391, in open
response = self._open(req, data)
File "/usr/lib/python2.6/urllib2.py", line 409, in _open
'_open', req)
File "/usr/lib/python2.6/urllib2.py", line 369, in _call_chain
result = func(*args)
File "/usr/lib/python2.6/urllib2.py", line 1169, in https_open
return self.do_open(httplib.HTTPSConnection, req)
File "/usr/lib/python2.6/urllib2.py", line 1107, in do_open
h = http_class(host, timeout=req.timeout) # will parse host:port
File "/usr/lib/python2.6/httplib.py", line 1101, in __init__
HTTPConnection.__init__(self, host, port, strict, timeout)
File "/usr/lib/python2.6/httplib.py", line 657, in __init__
self._set_hostport(host, port)
File "/usr/lib/python2.6/httplib.py", line 682, in _set_hostport
raise InvalidURL("nonnumeric port: '%s'" % host[i+1:])
InvalidURL: nonnumeric port: '[email protected]'
Original Comment By: Ian Lewis
์ต์ ๋ฒ์ ์ pip๋ ์ฌ์ฉ์ ์ด๋ฆ์ ์ฌ์ฉํ ๋ ๋ค์ ์ค๋ฅ๋ฅผ ๋ฐ์์ํค๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋ฐ ๋น๋ฐ๋ฒํธ:
Traceback (most recent call last):
File "/usr/lib/python2.6/threading.py", line 532, in __bootstrap_inner
self.run()
File "/usr/lib/python2.6/threading.py", line 484, in run
self.__target(*self.__args, **self.__kwargs)
File "/home/ian/.virtualenvs/test/lib/python2.6/site-
packages/pip-0.8.1-py2.6.egg/pip/index.py", 241ํ, _get_queued_page
page = self._get_page(location, req)
File "/home/ian/.virtualenvs/test/lib/python2.6/site-
packages/pip-0.8.1-py2.6.egg/pip/index.py", 326ํ, _get_page
return HTMLPage.get_page(link, req, cache=self.cache)
File "/home/ian/.virtualenvs/test/lib/python2.6/site-
packages/pip-0.8.1-py2.6.egg/pip/index.py", get_page์ 424ํ
content_type = cls._get_content_type(url)
File "/home/ian/.virtualenvs/test/lib/python2.6/site-
packages/pip-0.8.1-py2.6.egg/pip/index.py", 486ํ, _get_content_type
resp = urlopen(req)
File "/home/ian/.virtualenvs/test/lib/python2.6/site-
packages/pip-0.8.1-py2.6.egg/pip/download.py", 88ํ, ํธ์ถ ์ค
response = self.get_response(url)
File "/home/ian/.virtualenvs/test/lib/python2.6/site-
packages/pip-0.8.1-py2.6.egg/pip/download.py", get_response์ 107ํ
scheme, netloc, path, query, frag = urlparse.urlsplit(url)
File "/usr/lib/python2.6/urlparse.py", line 147, in urlsplit
i = url.find(':')
File "/usr/lib/python2.6/urllib2.py", line 218, in __getattr__
raise AttributeError, attr
AttributeError: find
๋ฌธ์ ๋ pip๊ฐ ์์นด์ด๋ธ ํ์ผ์ ๋ํด ํค๋ ์์ฒญ์ ์๋ํ ๋ ๋ฐ์ํ์ง๋ง
401์ ๋ง์์ต๋๋ค. https://bitbucket.org/ianb/pip/src/tip/pip/download.py#cl -86
self.get_response()์ ์ ๋ฌ๋ url์ urllib2.Request ๊ฐ์ฒด์ด์ง๋ง
get_response()๋ urlsplit()์ ํธ์ถํ๋ ค๊ณ ํฉ๋๋ค. ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
ํ์ผ์ด ๋ค์ด๋ก๋๋๋ ๊ฒ ๊ฐ์ต๋๋ค.
Original Comment By: Ian Lewis
์ด๊ฒ์ด ์์ ๋ ๊ฒ ๊ฐ์ต๋๋ค. HTTPS + ๊ธฐ๋ณธ ์ธ์ฆ ์๋์ ๊ฐ์ธ ์์ธ์ด ์๊ณ --index-url https://user:[email protected]
์์๋ง ์๋ํฉ๋๋ค.
์๋ฌด๋ ์ด๊ฒ์ ํ์ธํ๊ณ ๋ฌธ์ ๋ฅผ ๋ซ์ ์ ์์ต๋๊น?
์ด ์ฃผ์ ์ ์ฐ๊ฒฐ๋ pull ์์ฒญ(https://github.com/pypa/pip/pull/786)์ ์ถ๊ฐํ์ต๋๋ค.
@brutasse ํ์ธํ ์ ์์ต๋๋ค. ๋ซ์ผ์๊ฒ ์ต๋๊น?
1.5.6์๋ ์ฌ์ ํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
์ง๊ธ ๋ ผ์๋๊ณ ์๋ ๋ฌธ์ ๋ฅผ ์ ํํ ํ์ธํ ์ ์์ต๋๊น?
์ฃ์กํฉ๋๋ค. ๋๋ฅผ ์ํด ์๋ํฉ๋๋ค. ๋ด ์ค์ :-D
2014๋
7์ 18์ผ ์ค์ 5์ 20๋ถ์ "Matt Iversen" [email protected]์ด ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
์ง๊ธ ๋ ผ์๋๊ณ ์๋ ๋ฌธ์ ๋ฅผ ์ ํํ ํ์ธํ ์ ์์ต๋๊น?
โ
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/pypa/pip/issues/51#issuecomment -49406680.
์ฌ์ ํ URL์ ์ฌ์ฉ์ ์ด๋ฆ๊ณผ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํด์ผ ํฉ๋๊น?
pip==6.0.8
์์ ์ง์๋๋์?
๊ฐ์ธ PyPI ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๊ณ ๋ค์๊ณผ ๊ฐ์ด ์ค์น๋ฅผ ์คํํฉ๋๋ค.
pip install <my_package> --cert=<required_for_some_reason> --extra-index-url https://username:[email protected]/simple/ --allow-all-external
๊ทธ๋ฐ ๋ค์ ์๋ํ์ง๋ง ๋ํ์์ผ๋ก ์ฌ์ฉ์ ์ด๋ฆ๊ณผ ์ํธ๋ฅผ ๋ฌป์ต๋๋ค. ์ด ์คํฌ๋ฆฝํธ๊ฐ CLI๋ฅผ ์ฌ์ฉํ์ฌ ์ ธ ์ธ๋ถ์์ ์คํ๋ ๊ฒฝ์ฐ๋ ์๋๋๋ค.
์ฌ๊ธฐ์์ ๋ ผ์๋ ๋ฌธ์ ์ ์ฐ๊ฒฐ๋์ด ์๋์ง ํ์ธํ๊ฑฐ๋ ๋ค๋ฅธ ๋ฌธ์ ๋ฅผ ๋ง๋ค์ด์ผ ํ๋์ง ์ ์ํ๊ฑฐ๋ ์๋ฃจ์ ์ ์ง์ ํด ์ฃผ์ธ์.
@vladignatyev ๋ํ์์ผ๋ก ์ฌ์ฉ์/๋น๋ฐ๋ฒํธ๋ฅผ ๋ฌป๋ ๋ฌธ์ ์ ๋์ผํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. URL ์ธ์ฝ๋ฉ์ด ํ์ํ ์ํธ์ ๊ธฐํธ๊ฐ ์๋ ๋ฌธ์ ๋ก ๋ฒ์๋ฅผ ์ขํ์ต๋๋ค. ๋น๋ฐ๋ฒํธ๋ฅผ URL ์ธ์ฝ๋ฉํ์ง ์์ผ๋ฉด URL์ ๊ตฌ๋ฌธ ๋ถ์ํ ์ ์์ต๋๋ค. ๋น๋ฐ๋ฒํธ๋ฅผ URL ์ธ์ฝ๋ฉํ๋ฉด ์ธ์ฆ์ ์๋ํ๊ธฐ ์ ์ pip๊ฐ ๋น๋ฐ๋ฒํธ๋ฅผ URL ๋์ฝ๋ฉํ์ง ์๋๋ค๊ณ ์๊ฐํฉ๋๋ค.
pip 7.1.2์์๋์ด ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๋น๋ฐ๋ฒํธ์ URL ์ธ์ฝ๋ฉ์ด ํ์ํ ๊ธฐํธ๊ฐ ์๊ณ , pip๋ ์ธ์ฆ์ ์คํจํ๊ณ (401 ์๋ต ์์ ) ๋ํ์์ผ๋ก ์ฌ์ฉ์ ์ด๋ฆ/๋น๋ฐ๋ฒํธ๋ฅผ ๋ฌป๋ ๋ฉ์์ง๋ฅผ ํ์ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋ํ์์ผ๋ก ์ฌ์ฉ์/ํจ์ค๋ฅผ ์ ๋ ฅํ๋ฉด ์ ๋๋ก ์๋ํฉ๋๋ค. @bcbrown ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋น๋ฐ๋ฒํธ๋ฅผ URL ๋์ฝ๋ฉํ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
PIP 8.1.2๋ฅผ ์ต๋ํ ๋นจ๋ฆฌ ์์ ํ์ญ์์ค.
9.0.3
์ฌ์ฉํ์ฌ ์ด ๋ฌธ์ ์ ๋ด์ฐฉํ์ต๋๋ค. .... ์ด๊ฒ์ด ์ฌ์ ํ ์ฌ๊ฐํ ๋ฌธ์ ์
๋๊น?
URL์์ ์ฌ์ฉ์ ์ด๋ฆ/๋น๋ฐ๋ฒํธ๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํ๋ ๊ฒ์ ํฌํธ๊ฐ ์ง์ ๋ ๊ฒฝ์ฐ์๋ง ์๋ํฉ๋๋ค.
(์ ์ด๋ Debian 9, Python 2.7.13, pip 18.1์์, ๊ทธ๋ฌ๋ ๋ค๋ฅธ ์์คํ
์์๋ ์ด ๋ฌธ์ ๊ฐ ์์์ต๋๋ค)
์ด ์ฟผ๋ฆฌ๋ ์ฌ์ฉ์ ์ด๋ฆ/๋น๋ฐ๋ฒํธ: pip install -f https://user:[email protected]/pkgs requests
์ด๊ฒ์ ์๋ํฉ๋๋ค: pip install -f https://user:[email protected]:443/pkgs requests
์ด๊ฒ์ pip 18.1์์ ์๋ํ์ง๋ง ์ต์ ๋ฒ์ (19.1)์์ ์๋ํ์ง ์์ต๋๋ค. 18.1๋ก ๋๋๋ฆฐ ํ ํ์ธํ๋ฉด ์๋ํฉ๋๋ค.
URL์์ ์ฌ์ฉ์ ์ด๋ฆ/๋น๋ฐ๋ฒํธ๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํ๋ ๊ฒ์ ํฌํธ๊ฐ ์ง์ ๋ ๊ฒฝ์ฐ์๋ง ์๋ํฉ๋๋ค.
(์ ์ด๋ Debian 9, Python 2.7.13, pip 18.1์์, ๊ทธ๋ฌ๋ ๋ค๋ฅธ ์์คํ ์์๋ ์ด ๋ฌธ์ ๊ฐ ์์์ต๋๋ค)์ด ์ฟผ๋ฆฌ๋ ์ฌ์ฉ์ ์ด๋ฆ/๋น๋ฐ๋ฒํธ:
pip install -f https://user:[email protected]/pkgs requests
์ด๊ฒ์ ์๋ํฉ๋๋ค:pip install -f https://user:[email protected]:443/pkgs requests
@olt pip 19.1.1์ ์ฌ์ฉํ์ฌ ๋์ผํ ๋ฌธ์ ๊ฐ ์์๊ณ ์ ์ํ ๋๋ก ํฌํธ๋ฅผ ๋ฃ์ด ์๋ํ๋๋ก ๊ด๋ฆฌํ์ต๋๋ค. ๊ฝค ๋ชจํธํ ํด๊ฒฐ ๋ฐฉ๋ฒ, ๊ทํ์ ๋ต๋ณ์ ๋ ๋ง์ ํฌํ๋ฅผ ํ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
pip๋ URLOpener๋ฅผ ํตํด ๊ธฐ๋ณธ ์ธ์ฆ์ ์ง์ํฉ๋๋ค.
http://bitbucket.org/ianb/pip/src/tip/pip/download.py#cl -67
http://username:password@server/whatever/ ์ ๊ฐ์ URL์ ์ฌ์ฉ