2010-08-06 20:10:16 +02:00
|
|
|
import os
|
2010-08-19 18:59:10 +02:00
|
|
|
import sys
|
2013-05-28 23:58:08 +02:00
|
|
|
import textwrap
|
2010-06-09 02:03:48 +02:00
|
|
|
from os.path import abspath, join, curdir, pardir
|
2011-03-20 18:12:04 +01:00
|
|
|
|
2013-05-11 19:50:35 +02:00
|
|
|
from nose import SkipTest
|
2013-05-28 23:58:08 +02:00
|
|
|
from pip.util import rmtree
|
|
|
|
from tests.lib import tests_data, reset_env, run_pip, pyversion, mkdir, pip_install_local, write_file, find_links
|
2013-05-27 19:46:31 +02:00
|
|
|
from tests.lib.local_repos import local_checkout
|
|
|
|
from tests.lib.path import Path
|
2010-06-03 04:25:26 +02:00
|
|
|
|
2011-05-04 09:44:02 +02:00
|
|
|
|
2010-02-25 00:16:43 +01:00
|
|
|
def test_install_from_pypi():
|
|
|
|
"""
|
|
|
|
Test installing a package from PyPI.
|
|
|
|
"""
|
2010-04-28 17:41:55 +02:00
|
|
|
e = reset_env()
|
2010-05-20 08:35:04 +02:00
|
|
|
result = run_pip('install', '-vvv', 'INITools==0.2')
|
2010-06-09 01:09:37 +02:00
|
|
|
egg_info_folder = e.site_packages / 'INITools-0.2-py%s.egg-info' % pyversion
|
|
|
|
initools_folder = e.site_packages / 'initools'
|
|
|
|
assert egg_info_folder in result.files_created, str(result)
|
|
|
|
assert initools_folder in result.files_created, str(result)
|
2010-02-24 11:24:54 +01:00
|
|
|
|
2010-06-03 04:25:26 +02:00
|
|
|
|
2010-02-25 00:16:43 +01:00
|
|
|
def test_editable_install():
|
|
|
|
"""
|
|
|
|
Test editable installation.
|
|
|
|
"""
|
2010-02-24 11:24:54 +01:00
|
|
|
reset_env()
|
|
|
|
result = run_pip('install', '-e', 'INITools==0.2', expect_error=True)
|
2013-01-31 06:30:58 +01:00
|
|
|
assert "INITools==0.2 should either by a path to a local project or a VCS url" in result.stdout
|
2010-02-24 11:24:54 +01:00
|
|
|
assert len(result.files_created) == 1, result.files_created
|
2010-02-24 11:24:54 +01:00
|
|
|
assert not result.files_updated, result.files_updated
|
|
|
|
|
2010-06-03 04:25:26 +02:00
|
|
|
|
2010-02-25 00:16:43 +01:00
|
|
|
def test_install_editable_from_svn():
|
|
|
|
"""
|
|
|
|
Test checking out from svn.
|
|
|
|
"""
|
2010-06-04 02:58:16 +02:00
|
|
|
reset_env()
|
2010-06-09 01:09:37 +02:00
|
|
|
result = run_pip('install',
|
|
|
|
'-e',
|
2010-06-22 00:48:28 +02:00
|
|
|
'%s#egg=initools-dev' %
|
|
|
|
local_checkout('svn+http://svn.colorstudy.com/INITools/trunk'))
|
2010-04-28 22:55:10 +02:00
|
|
|
result.assert_installed('INITools', with_files=['.svn'])
|
2010-02-24 11:24:54 +01:00
|
|
|
|
2010-06-03 04:25:26 +02:00
|
|
|
|
2010-04-15 13:01:36 +02:00
|
|
|
def test_download_editable_to_custom_path():
|
|
|
|
"""
|
|
|
|
Test downloading an editable using a relative custom src folder.
|
|
|
|
"""
|
|
|
|
reset_env()
|
|
|
|
mkdir('customdl')
|
2010-06-09 01:09:37 +02:00
|
|
|
result = run_pip('install',
|
|
|
|
'-e',
|
2010-06-22 00:48:28 +02:00
|
|
|
'%s#egg=initools-dev' %
|
|
|
|
local_checkout('svn+http://svn.colorstudy.com/INITools/trunk'),
|
2010-06-09 01:09:37 +02:00
|
|
|
'--src',
|
|
|
|
'customsrc',
|
|
|
|
'--download',
|
|
|
|
'customdl')
|
2010-04-28 22:55:10 +02:00
|
|
|
customsrc = Path('scratch')/'customsrc'/'initools'
|
|
|
|
assert customsrc in result.files_created, sorted(result.files_created.keys())
|
|
|
|
assert customsrc/'setup.py' in result.files_created, sorted(result.files_created.keys())
|
2010-06-03 04:25:26 +02:00
|
|
|
|
2010-04-28 22:55:10 +02:00
|
|
|
customdl = Path('scratch')/'customdl'/'initools'
|
2010-06-09 01:09:37 +02:00
|
|
|
customdl_files_created = [filename for filename in result.files_created
|
|
|
|
if filename.startswith(customdl)]
|
|
|
|
assert customdl_files_created
|
2010-04-15 13:01:36 +02:00
|
|
|
|
2010-06-03 04:25:26 +02:00
|
|
|
|
2010-04-15 15:26:21 +02:00
|
|
|
def test_editable_no_install_followed_by_no_download():
|
|
|
|
"""
|
|
|
|
Test installing an editable in two steps (first with --no-install, then with --no-download).
|
|
|
|
"""
|
|
|
|
reset_env()
|
|
|
|
|
2010-06-09 01:09:37 +02:00
|
|
|
result = run_pip('install',
|
|
|
|
'-e',
|
2010-06-22 00:48:28 +02:00
|
|
|
'%s#egg=initools-dev' %
|
|
|
|
local_checkout('svn+http://svn.colorstudy.com/INITools/trunk'),
|
2010-06-09 01:09:37 +02:00
|
|
|
'--no-install', expect_error=True)
|
2010-04-28 22:55:10 +02:00
|
|
|
result.assert_installed('INITools', without_egg_link=True, with_files=['.svn'])
|
2010-04-15 15:26:21 +02:00
|
|
|
|
2010-06-09 01:09:37 +02:00
|
|
|
result = run_pip('install',
|
|
|
|
'-e',
|
2010-06-22 00:48:28 +02:00
|
|
|
'%s#egg=initools-dev' %
|
|
|
|
local_checkout('svn+http://svn.colorstudy.com/INITools/trunk'),
|
2010-06-14 18:54:44 +02:00
|
|
|
'--no-download', expect_error=True)
|
2010-04-28 22:55:10 +02:00
|
|
|
result.assert_installed('INITools', without_files=[curdir, '.svn'])
|
2010-04-15 15:26:21 +02:00
|
|
|
|
2010-06-03 04:25:26 +02:00
|
|
|
|
2010-04-15 15:26:21 +02:00
|
|
|
def test_no_install_followed_by_no_download():
|
|
|
|
"""
|
|
|
|
Test installing in two steps (first with --no-install, then with --no-download).
|
|
|
|
"""
|
2010-04-28 22:55:10 +02:00
|
|
|
env = reset_env()
|
2010-04-15 15:26:21 +02:00
|
|
|
|
2010-06-09 01:09:37 +02:00
|
|
|
egg_info_folder = env.site_packages/'INITools-0.2-py%s.egg-info' % pyversion
|
|
|
|
initools_folder = env.site_packages/'initools'
|
2010-05-02 20:11:45 +02:00
|
|
|
build_dir = env.venv/'build'/'INITools'
|
2010-04-15 15:26:21 +02:00
|
|
|
|
2010-06-09 01:57:29 +02:00
|
|
|
result1 = run_pip('install', 'INITools==0.2', '--no-install', expect_error=True)
|
2010-06-09 01:09:37 +02:00
|
|
|
assert egg_info_folder not in result1.files_created, str(result1)
|
|
|
|
assert initools_folder not in result1.files_created, sorted(result1.files_created)
|
|
|
|
assert build_dir in result1.files_created, result1.files_created
|
|
|
|
assert build_dir/'INITools.egg-info' in result1.files_created
|
|
|
|
|
|
|
|
result2 = run_pip('install', 'INITools==0.2', '--no-download', expect_error=True)
|
|
|
|
assert egg_info_folder in result2.files_created, str(result2)
|
|
|
|
assert initools_folder in result2.files_created, sorted(result2.files_created)
|
|
|
|
assert build_dir not in result2.files_created
|
|
|
|
assert build_dir/'INITools.egg-info' not in result2.files_created
|
2010-02-24 11:24:54 +01:00
|
|
|
|
2010-06-03 04:25:26 +02:00
|
|
|
|
2010-04-15 17:08:02 +02:00
|
|
|
def test_bad_install_with_no_download():
|
|
|
|
"""
|
|
|
|
Test that --no-download behaves sensibly if the package source can't be found.
|
|
|
|
"""
|
|
|
|
reset_env()
|
2010-06-03 04:25:26 +02:00
|
|
|
result = run_pip('install', 'INITools==0.2', '--no-download', expect_error=True)
|
2010-06-09 01:09:37 +02:00
|
|
|
assert "perhaps --no-download was used without first running "\
|
|
|
|
"an equivalent install with --no-install?" in result.stdout
|
2010-04-15 17:08:02 +02:00
|
|
|
|
2010-06-03 04:25:26 +02:00
|
|
|
|
2010-02-25 00:16:43 +01:00
|
|
|
def test_install_dev_version_from_pypi():
|
|
|
|
"""
|
|
|
|
Test using package==dev.
|
|
|
|
"""
|
2010-04-28 17:41:55 +02:00
|
|
|
e = reset_env()
|
2010-02-24 11:24:54 +01:00
|
|
|
result = run_pip('install', 'INITools==dev', expect_error=True)
|
2010-04-28 17:41:55 +02:00
|
|
|
assert (e.site_packages / 'initools') in result.files_created, str(result.stdout)
|
2010-02-24 11:24:54 +01:00
|
|
|
|
2010-06-03 04:25:26 +02:00
|
|
|
|
2010-02-25 00:16:43 +01:00
|
|
|
def test_install_editable_from_git():
|
|
|
|
"""
|
|
|
|
Test cloning from Git.
|
|
|
|
"""
|
2010-06-04 02:58:16 +02:00
|
|
|
reset_env()
|
2011-03-15 20:49:48 +01:00
|
|
|
args = ['install']
|
|
|
|
args.extend(['-e',
|
2011-09-14 00:20:06 +02:00
|
|
|
'%s#egg=pip-test-package' %
|
|
|
|
local_checkout('git+http://github.com/pypa/pip-test-package.git')])
|
2011-03-19 04:19:22 +01:00
|
|
|
result = run_pip(*args, **{"expect_error": True})
|
2011-09-14 00:20:06 +02:00
|
|
|
result.assert_installed('pip-test-package', with_files=['.git'])
|
2010-02-24 11:24:54 +01:00
|
|
|
|
2010-06-03 04:25:26 +02:00
|
|
|
|
2010-02-25 00:16:43 +01:00
|
|
|
def test_install_editable_from_hg():
|
|
|
|
"""
|
|
|
|
Test cloning from Mercurial.
|
|
|
|
"""
|
2010-06-04 02:58:16 +02:00
|
|
|
reset_env()
|
2010-06-09 01:09:37 +02:00
|
|
|
result = run_pip('install', '-e',
|
2013-03-22 00:58:21 +01:00
|
|
|
'%s#egg=ScriptTest' %
|
|
|
|
local_checkout('hg+https://bitbucket.org/ianb/scripttest'),
|
2010-06-09 01:09:37 +02:00
|
|
|
expect_error=True)
|
2013-03-22 00:58:21 +01:00
|
|
|
result.assert_installed('ScriptTest', with_files=['.hg'])
|
2010-02-24 11:24:54 +01:00
|
|
|
|
2010-06-03 04:25:26 +02:00
|
|
|
|
2010-02-25 00:16:43 +01:00
|
|
|
def test_vcs_url_final_slash_normalization():
|
|
|
|
"""
|
|
|
|
Test that presence or absence of final slash in VCS URL is normalized.
|
|
|
|
"""
|
2010-02-24 11:24:54 +01:00
|
|
|
reset_env()
|
2010-06-09 01:09:37 +02:00
|
|
|
result = run_pip('install', '-e',
|
2013-03-22 00:58:21 +01:00
|
|
|
'%s/#egg=ScriptTest' %
|
|
|
|
local_checkout('hg+https://bitbucket.org/ianb/scripttest'),
|
2010-06-09 01:09:37 +02:00
|
|
|
expect_error=True)
|
2010-02-24 11:24:54 +01:00
|
|
|
assert 'pip-log.txt' not in result.files_created, result.files_created['pip-log.txt'].bytes
|
|
|
|
|
2010-06-03 04:25:26 +02:00
|
|
|
|
2010-02-25 00:16:43 +01:00
|
|
|
def test_install_editable_from_bazaar():
|
|
|
|
"""
|
|
|
|
Test checking out from Bazaar.
|
|
|
|
"""
|
2010-06-04 02:58:16 +02:00
|
|
|
reset_env()
|
2010-06-09 01:09:37 +02:00
|
|
|
result = run_pip('install', '-e',
|
2010-06-22 00:48:28 +02:00
|
|
|
'%s/@174#egg=django-wikiapp' %
|
|
|
|
local_checkout('bzr+http://bazaar.launchpad.net/%7Edjango-wikiapp/django-wikiapp/release-0.1'),
|
2010-06-09 01:09:37 +02:00
|
|
|
expect_error=True)
|
2010-04-28 22:55:10 +02:00
|
|
|
result.assert_installed('django-wikiapp', with_files=['.bzr'])
|
2010-04-13 00:34:38 +02:00
|
|
|
|
2010-02-24 11:24:54 +01:00
|
|
|
|
2010-02-25 00:16:43 +01:00
|
|
|
def test_vcs_url_urlquote_normalization():
|
|
|
|
"""
|
|
|
|
Test that urlquoted characters are normalized for repo URL comparison.
|
|
|
|
"""
|
2010-02-24 11:24:54 +01:00
|
|
|
reset_env()
|
2010-06-09 01:09:37 +02:00
|
|
|
result = run_pip('install', '-e',
|
2010-06-22 00:48:28 +02:00
|
|
|
'%s/#egg=django-wikiapp' %
|
|
|
|
local_checkout('bzr+http://bazaar.launchpad.net/%7Edjango-wikiapp/django-wikiapp/release-0.1'),
|
2010-06-09 01:09:37 +02:00
|
|
|
expect_error=True)
|
2010-02-24 11:24:54 +01:00
|
|
|
assert 'pip-log.txt' not in result.files_created, result.files_created['pip-log.txt'].bytes
|
|
|
|
|
2010-06-03 04:25:26 +02:00
|
|
|
|
2010-04-13 08:59:43 +02:00
|
|
|
def test_install_from_local_directory():
|
|
|
|
"""
|
|
|
|
Test installing from a local directory.
|
|
|
|
"""
|
2010-04-28 22:55:10 +02:00
|
|
|
env = reset_env()
|
2013-05-27 19:46:31 +02:00
|
|
|
to_install = abspath(join(tests_data, 'packages', 'FSPkg'))
|
2010-04-13 08:59:43 +02:00
|
|
|
result = run_pip('install', to_install, expect_error=False)
|
2010-06-09 01:09:37 +02:00
|
|
|
fspkg_folder = env.site_packages/'fspkg'
|
|
|
|
egg_info_folder = env.site_packages/'FSPkg-0.1dev-py%s.egg-info' % pyversion
|
|
|
|
assert fspkg_folder in result.files_created, str(result.stdout)
|
|
|
|
assert egg_info_folder in result.files_created, str(result)
|
2010-04-13 08:59:43 +02:00
|
|
|
|
2010-06-03 04:25:26 +02:00
|
|
|
|
2010-04-13 18:12:50 +02:00
|
|
|
def test_install_from_local_directory_with_no_setup_py():
|
|
|
|
"""
|
|
|
|
Test installing from a local directory with no 'setup.py'.
|
|
|
|
"""
|
|
|
|
reset_env()
|
2013-05-27 19:46:31 +02:00
|
|
|
result = run_pip('install', tests_data, expect_error=True)
|
2010-04-13 18:12:50 +02:00
|
|
|
assert len(result.files_created) == 1, result.files_created
|
|
|
|
assert 'pip-log.txt' in result.files_created, result.files_created
|
|
|
|
assert "is not installable. File 'setup.py' not found." in result.stdout
|
|
|
|
|
2010-06-03 04:25:26 +02:00
|
|
|
|
2012-05-31 14:49:19 +02:00
|
|
|
def test_editable_install_from_local_directory_with_no_setup_py():
|
|
|
|
"""
|
|
|
|
Test installing from a local directory with no 'setup.py'.
|
|
|
|
"""
|
|
|
|
reset_env()
|
2013-05-27 19:46:31 +02:00
|
|
|
result = run_pip('install', '-e', tests_data, expect_error=True)
|
2012-05-31 14:49:19 +02:00
|
|
|
assert len(result.files_created) == 1, result.files_created
|
|
|
|
assert 'pip-log.txt' in result.files_created, result.files_created
|
|
|
|
assert "is not installable. File 'setup.py' not found." in result.stdout
|
|
|
|
|
|
|
|
|
2012-05-22 12:54:40 +02:00
|
|
|
def test_install_as_egg():
|
|
|
|
"""
|
|
|
|
Test installing as egg, instead of flat install.
|
|
|
|
"""
|
|
|
|
env = reset_env()
|
2013-05-27 19:46:31 +02:00
|
|
|
to_install = abspath(join(tests_data, 'packages', 'FSPkg'))
|
2012-05-22 12:54:40 +02:00
|
|
|
result = run_pip('install', to_install, '--egg', expect_error=False)
|
|
|
|
fspkg_folder = env.site_packages/'fspkg'
|
|
|
|
egg_folder = env.site_packages/'FSPkg-0.1dev-py%s.egg' % pyversion
|
|
|
|
assert fspkg_folder not in result.files_created, str(result.stdout)
|
|
|
|
assert egg_folder in result.files_created, str(result)
|
|
|
|
assert join(egg_folder, 'fspkg') in result.files_created, str(result)
|
|
|
|
|
|
|
|
|
2012-10-02 07:50:24 +02:00
|
|
|
|
2010-04-10 11:57:49 +02:00
|
|
|
def test_install_curdir():
|
|
|
|
"""
|
|
|
|
Test installing current directory ('.').
|
|
|
|
"""
|
2010-06-09 01:09:37 +02:00
|
|
|
env = reset_env()
|
2013-05-27 19:46:31 +02:00
|
|
|
run_from = abspath(join(tests_data, 'packages', 'FSPkg'))
|
2011-03-23 06:08:14 +01:00
|
|
|
# Python 2.4 Windows balks if this exists already
|
|
|
|
egg_info = join(run_from, "FSPkg.egg-info")
|
|
|
|
if os.path.isdir(egg_info):
|
|
|
|
rmtree(egg_info)
|
2010-04-13 08:59:43 +02:00
|
|
|
result = run_pip('install', curdir, cwd=run_from, expect_error=False)
|
2010-06-09 01:09:37 +02:00
|
|
|
fspkg_folder = env.site_packages/'fspkg'
|
|
|
|
egg_info_folder = env.site_packages/'FSPkg-0.1dev-py%s.egg-info' % pyversion
|
|
|
|
assert fspkg_folder in result.files_created, str(result.stdout)
|
|
|
|
assert egg_info_folder in result.files_created, str(result)
|
2010-04-10 11:57:49 +02:00
|
|
|
|
2010-08-19 17:40:21 +02:00
|
|
|
|
2010-04-10 11:57:49 +02:00
|
|
|
def test_install_pardir():
|
|
|
|
"""
|
|
|
|
Test installing parent directory ('..').
|
|
|
|
"""
|
2010-06-09 01:09:37 +02:00
|
|
|
env = reset_env()
|
2013-05-27 19:46:31 +02:00
|
|
|
run_from = abspath(join(tests_data, 'packages', 'FSPkg', 'fspkg'))
|
2010-04-13 08:59:43 +02:00
|
|
|
result = run_pip('install', pardir, cwd=run_from, expect_error=False)
|
2010-06-09 01:09:37 +02:00
|
|
|
fspkg_folder = env.site_packages/'fspkg'
|
|
|
|
egg_info_folder = env.site_packages/'FSPkg-0.1dev-py%s.egg-info' % pyversion
|
|
|
|
assert fspkg_folder in result.files_created, str(result.stdout)
|
|
|
|
assert egg_info_folder in result.files_created, str(result)
|
2010-05-30 14:39:11 +02:00
|
|
|
|
|
|
|
|
|
|
|
def test_install_global_option():
|
|
|
|
"""
|
2010-06-09 01:09:37 +02:00
|
|
|
Test using global distutils options.
|
|
|
|
(In particular those that disable the actual install action)
|
2010-05-30 14:39:11 +02:00
|
|
|
"""
|
|
|
|
reset_env()
|
|
|
|
result = run_pip('install', '--global-option=--version', "INITools==0.1")
|
|
|
|
assert '0.1\n' in result.stdout
|
2010-08-06 17:41:49 +02:00
|
|
|
|
|
|
|
|
2010-09-07 19:26:13 +02:00
|
|
|
def test_install_with_pax_header():
|
|
|
|
"""
|
|
|
|
test installing from a tarball with pax header for python<2.6
|
|
|
|
"""
|
|
|
|
reset_env()
|
2013-05-27 19:46:31 +02:00
|
|
|
run_from = abspath(join(tests_data, 'packages'))
|
2011-03-19 04:19:22 +01:00
|
|
|
run_pip('install', 'paxpkg.tar.bz2', cwd=run_from)
|
2010-09-07 19:26:13 +02:00
|
|
|
|
2011-05-04 09:44:02 +02:00
|
|
|
|
2012-06-25 17:47:12 +02:00
|
|
|
def test_install_with_hacked_egg_info():
|
|
|
|
"""
|
|
|
|
test installing a package which defines its own egg_info class
|
|
|
|
"""
|
|
|
|
reset_env()
|
2013-05-27 19:46:31 +02:00
|
|
|
run_from = abspath(join(tests_data, 'packages', 'HackedEggInfo'))
|
2012-06-25 17:47:12 +02:00
|
|
|
result = run_pip('install', '.', cwd=run_from)
|
|
|
|
assert 'Successfully installed hackedegginfo\n' in result.stdout
|
|
|
|
|
|
|
|
|
2010-08-19 03:29:36 +02:00
|
|
|
def test_install_using_install_option_and_editable():
|
|
|
|
"""
|
|
|
|
Test installing a tool using -e and --install-option
|
|
|
|
"""
|
|
|
|
env = reset_env()
|
2010-08-19 04:11:08 +02:00
|
|
|
folder = 'script_folder'
|
|
|
|
mkdir(folder)
|
2011-03-19 04:19:22 +01:00
|
|
|
url = 'git+git://github.com/pypa/virtualenv'
|
2010-08-19 03:29:36 +02:00
|
|
|
result = run_pip('install', '-e', '%s#egg=virtualenv' %
|
2011-03-15 20:49:48 +01:00
|
|
|
local_checkout(url),
|
2010-08-19 04:11:08 +02:00
|
|
|
'--install-option=--script-dir=%s' % folder)
|
|
|
|
virtualenv_bin = env.venv/'src'/'virtualenv'/folder/'virtualenv'+env.exe
|
|
|
|
assert virtualenv_bin in result.files_created
|
2010-08-19 03:29:36 +02:00
|
|
|
|
|
|
|
|
|
|
|
def test_install_global_option_using_editable():
|
|
|
|
"""
|
|
|
|
Test using global distutils options, but in an editable installation
|
|
|
|
"""
|
|
|
|
reset_env()
|
2011-03-19 04:19:22 +01:00
|
|
|
url = 'hg+http://bitbucket.org/runeh/anyjson'
|
2010-08-19 03:29:36 +02:00
|
|
|
result = run_pip('install', '--global-option=--version',
|
2011-03-19 04:19:22 +01:00
|
|
|
'-e', '%s@0.2.5#egg=anyjson' %
|
2011-03-15 20:49:48 +01:00
|
|
|
local_checkout(url))
|
2011-03-19 04:19:22 +01:00
|
|
|
assert '0.2.5\n' in result.stdout
|
2010-08-19 03:29:36 +02:00
|
|
|
|
|
|
|
|
2010-08-06 17:41:49 +02:00
|
|
|
def test_install_package_with_same_name_in_curdir():
|
|
|
|
"""
|
|
|
|
Test installing a package with the same name of a local folder
|
|
|
|
"""
|
|
|
|
env = reset_env()
|
|
|
|
mkdir('mock==0.6')
|
|
|
|
result = run_pip('install', 'mock==0.6')
|
|
|
|
egg_folder = env.site_packages / 'mock-0.6.0-py%s.egg-info' % pyversion
|
|
|
|
assert egg_folder in result.files_created, str(result)
|
|
|
|
|
|
|
|
|
|
|
|
mock100_setup_py = textwrap.dedent('''\
|
|
|
|
from setuptools import setup
|
|
|
|
setup(name='mock',
|
|
|
|
version='100.1')''')
|
|
|
|
|
|
|
|
|
|
|
|
def test_install_folder_using_dot_slash():
|
|
|
|
"""
|
|
|
|
Test installing a folder using pip install ./foldername
|
|
|
|
"""
|
|
|
|
env = reset_env()
|
|
|
|
mkdir('mock')
|
|
|
|
pkg_path = env.scratch_path/'mock'
|
|
|
|
write_file('setup.py', mock100_setup_py, pkg_path)
|
|
|
|
result = run_pip('install', './mock')
|
|
|
|
egg_folder = env.site_packages / 'mock-100.1-py%s.egg-info' % pyversion
|
|
|
|
assert egg_folder in result.files_created, str(result)
|
|
|
|
|
|
|
|
|
|
|
|
def test_install_folder_using_slash_in_the_end():
|
2010-08-06 20:05:00 +02:00
|
|
|
r"""
|
|
|
|
Test installing a folder using pip install foldername/ or foldername\
|
2010-08-06 17:41:49 +02:00
|
|
|
"""
|
|
|
|
env = reset_env()
|
|
|
|
mkdir('mock')
|
|
|
|
pkg_path = env.scratch_path/'mock'
|
|
|
|
write_file('setup.py', mock100_setup_py, pkg_path)
|
2010-08-06 20:05:00 +02:00
|
|
|
result = run_pip('install', 'mock' + os.path.sep)
|
2010-08-06 17:41:49 +02:00
|
|
|
egg_folder = env.site_packages / 'mock-100.1-py%s.egg-info' % pyversion
|
|
|
|
assert egg_folder in result.files_created, str(result)
|
|
|
|
|
|
|
|
|
|
|
|
def test_install_folder_using_relative_path():
|
|
|
|
"""
|
|
|
|
Test installing a folder using pip install folder1/folder2
|
|
|
|
"""
|
|
|
|
env = reset_env()
|
|
|
|
mkdir('initools')
|
|
|
|
mkdir(Path('initools')/'mock')
|
|
|
|
pkg_path = env.scratch_path/'initools'/'mock'
|
|
|
|
write_file('setup.py', mock100_setup_py, pkg_path)
|
|
|
|
result = run_pip('install', Path('initools')/'mock')
|
|
|
|
egg_folder = env.site_packages / 'mock-100.1-py%s.egg-info' % pyversion
|
|
|
|
assert egg_folder in result.files_created, str(result)
|
2010-12-09 04:15:53 +01:00
|
|
|
|
2011-05-04 09:44:02 +02:00
|
|
|
|
2010-12-09 04:15:53 +01:00
|
|
|
def test_install_package_which_contains_dev_in_name():
|
|
|
|
"""
|
2011-03-19 04:19:22 +01:00
|
|
|
Test installing package from pypi which contains 'dev' in name
|
2010-12-09 04:15:53 +01:00
|
|
|
"""
|
|
|
|
env = reset_env()
|
|
|
|
result = run_pip('install', 'django-devserver==0.0.4')
|
|
|
|
devserver_folder = env.site_packages/'devserver'
|
|
|
|
egg_info_folder = env.site_packages/'django_devserver-0.0.4-py%s.egg-info' % pyversion
|
|
|
|
assert devserver_folder in result.files_created, str(result.stdout)
|
|
|
|
assert egg_info_folder in result.files_created, str(result)
|
2011-03-14 23:07:12 +01:00
|
|
|
|
2011-05-04 09:44:02 +02:00
|
|
|
|
2012-02-03 13:31:28 +01:00
|
|
|
def test_install_package_with_target():
|
|
|
|
"""
|
|
|
|
Test installing a package using pip install --target
|
|
|
|
"""
|
|
|
|
env = reset_env()
|
|
|
|
target_dir = env.scratch_path/'target'
|
2012-02-03 20:37:53 +01:00
|
|
|
result = run_pip('install', '-t', target_dir, "initools==0.1")
|
|
|
|
assert Path('scratch')/'target'/'initools' in result.files_created, str(result)
|
2012-02-03 13:31:28 +01:00
|
|
|
|
|
|
|
|
2012-10-02 05:55:56 +02:00
|
|
|
def test_install_package_with_root():
|
|
|
|
"""
|
|
|
|
Test installing a package using pip install --root
|
|
|
|
"""
|
|
|
|
env = reset_env()
|
|
|
|
root_dir = env.scratch_path/'root'
|
2013-02-14 04:17:28 +01:00
|
|
|
result = run_pip('install', '--root', root_dir, '-f', find_links, '--no-index', 'simple==1.0')
|
|
|
|
normal_install_path = env.root_path / env.site_packages / 'simple-1.0-py%s.egg-info' % pyversion
|
|
|
|
#use distutils to change the root exactly how the --root option does it
|
|
|
|
from distutils.util import change_root
|
|
|
|
root_path = change_root(os.path.join(env.scratch, 'root'), normal_install_path)
|
|
|
|
assert root_path in result.files_created, str(result)
|
2012-10-02 05:55:56 +02:00
|
|
|
|
|
|
|
|
2013-05-28 23:58:08 +02:00
|
|
|
def test_install_package_that_emits_unicode():
|
2011-04-28 06:01:08 +02:00
|
|
|
"""
|
2013-05-28 23:58:08 +02:00
|
|
|
Install a package with a setup.py that emits UTF-8 output and then fails.
|
|
|
|
This works fine in Python 2, but fails in Python 3 with:
|
2011-04-28 06:01:08 +02:00
|
|
|
|
2013-05-28 23:58:08 +02:00
|
|
|
Traceback (most recent call last):
|
|
|
|
...
|
|
|
|
File "/Users/marc/python/virtualenvs/py3.1-phpserialize/lib/python3.2/site-packages/pip-1.0.2-py3.2.egg/pip/__init__.py", line 230, in call_subprocess
|
|
|
|
line = console_to_str(stdout.readline())
|
|
|
|
File "/Users/marc/python/virtualenvs/py3.1-phpserialize/lib/python3.2/site-packages/pip-1.0.2-py3.2.egg/pip/backwardcompat.py", line 60, in console_to_str
|
|
|
|
return s.decode(console_encoding)
|
|
|
|
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 17: ordinal not in range(128)
|
2011-05-04 09:44:02 +02:00
|
|
|
|
2013-05-28 23:58:08 +02:00
|
|
|
Refs https://github.com/pypa/pip/issues/326
|
2011-04-21 16:14:24 +02:00
|
|
|
"""
|
2011-04-26 14:35:17 +02:00
|
|
|
|
2013-05-28 23:58:08 +02:00
|
|
|
#skip on win/py3 for now, see issue #782
|
|
|
|
if sys.platform == 'win32' and sys.version_info >= (3,):
|
|
|
|
raise SkipTest()
|
2011-04-28 07:53:48 +02:00
|
|
|
|
2013-05-28 23:58:08 +02:00
|
|
|
env = reset_env()
|
|
|
|
to_install = os.path.abspath(os.path.join(tests_data, 'packages', 'BrokenEmitsUTF8'))
|
|
|
|
result = run_pip('install', to_install, expect_error=True, expect_temp=True, quiet=True)
|
|
|
|
assert 'FakeError: this package designed to fail on install' in result.stdout
|
|
|
|
assert 'UnicodeDecodeError' not in result.stdout
|
2011-04-26 14:35:17 +02:00
|
|
|
|
2011-05-04 09:44:02 +02:00
|
|
|
|
2013-05-28 23:58:08 +02:00
|
|
|
def test_url_req_case_mismatch():
|
2011-04-26 14:35:17 +02:00
|
|
|
"""
|
2013-05-28 23:58:08 +02:00
|
|
|
tar ball url requirements (with no egg fragment), that happen to have upper case project names,
|
|
|
|
should be considered equal to later requirements that reference the project name using lower case.
|
2011-04-26 14:35:17 +02:00
|
|
|
|
2013-05-28 23:58:08 +02:00
|
|
|
tests/packages contains Upper-1.0.tar.gz and Upper-2.0.tar.gz
|
|
|
|
'requiresupper' has install_requires = ['upper']
|
|
|
|
"""
|
|
|
|
env = reset_env()
|
|
|
|
Upper = os.path.join(find_links, 'Upper-1.0.tar.gz')
|
|
|
|
result = run_pip('install', '--no-index', '-f', find_links, Upper, 'requiresupper')
|
2011-04-28 07:53:48 +02:00
|
|
|
|
2013-05-28 23:58:08 +02:00
|
|
|
#only Upper-1.0.tar.gz should get installed.
|
|
|
|
egg_folder = env.site_packages / 'Upper-1.0-py%s.egg-info' % pyversion
|
|
|
|
assert egg_folder in result.files_created, str(result)
|
|
|
|
egg_folder = env.site_packages / 'Upper-2.0-py%s.egg-info' % pyversion
|
|
|
|
assert egg_folder not in result.files_created, str(result)
|
2012-05-31 07:38:41 +02:00
|
|
|
|
2013-05-11 19:50:35 +02:00
|
|
|
|
|
|
|
def test_dont_install_distribute_in_py3():
|
|
|
|
"""
|
|
|
|
Test we skip distribute in py3
|
|
|
|
"""
|
|
|
|
if sys.version_info < (3, 0):
|
|
|
|
raise SkipTest()
|
|
|
|
env = reset_env()
|
|
|
|
result = run_pip('install', 'distribute')
|
|
|
|
assert "Skipping distribute: Can not install distribute due to bootstrap issues" in result.stdout
|
|
|
|
assert not result.files_updated
|
2013-05-28 23:58:08 +02:00
|
|
|
|
|
|
|
|
|
|
|
def test_pip_second_command_line_interface_works():
|
|
|
|
"""
|
|
|
|
Check if ``pip-<PYVERSION>`` commands behaves equally
|
|
|
|
"""
|
|
|
|
e = reset_env()
|
|
|
|
|
|
|
|
args = ['pip-%s' % pyversion]
|
|
|
|
args.extend(['install', 'INITools==0.2'])
|
|
|
|
result = e.run(*args)
|
|
|
|
egg_info_folder = e.site_packages / 'INITools-0.2-py%s.egg-info' % pyversion
|
|
|
|
initools_folder = e.site_packages / 'initools'
|
|
|
|
assert egg_info_folder in result.files_created, str(result)
|
|
|
|
assert initools_folder in result.files_created, str(result)
|
|
|
|
|
|
|
|
|