Merge remote-tracking branch 'upstream/master' into activate-custom-virtualenv

This commit is contained in:
jxltom
2018-12-16 18:29:06 +08:00
13 changed files with 79 additions and 41 deletions
+1 -1
View File
@@ -49,7 +49,7 @@ You can quickly play with Pipenv right in your browser:
Install Pipenv Today!
---------------------
If you're on MacOS, you can install Pipenv easily with Homebrew::
If you're on MacOS, you can install Pipenv easily with Homebrew. You can also use Linuxbrew on Linux using the same command::
$ brew install pipenv
+7 -7
View File
@@ -52,16 +52,16 @@ check this by running::
$ pip --version
pip 9.0.1
If you installed Python from source, with an installer from `python.org`_, or
via `Homebrew`_ you should already have pip. If you're on Linux and installed
If you installed Python from source, with an installer from `python.org`_, via `Homebrew`_ or via `Linuxbrew`_ you should already have pip. If you're on Linux and installed
using your OS package manager, you may have to `install pip <https://pip.pypa.io/en/stable/installing/>`_ separately.
If you plan to install Pipenv using Homebrew you can skip this step. The
Homebrew installer takes care of pip for you.
If you plan to install Pipenv using Homebrew or Linuxbrew you can skip this step. The
Homebrew/Linuxbrew installer takes care of pip for you.
.. _getting started tutorial: https://opentechschool.github.io/python-beginners/en/getting_started.html#what-is-python-exactly
.. _python.org: https://python.org
.. _Homebrew: https://brew.sh
.. _Linuxbrew: https://linuxbrew.sh/
.. _Installing Python: http://docs.python-guide.org/en/latest/starting/installation/
@@ -83,13 +83,13 @@ cases.
☤ Homebrew Installation of Pipenv
---------------------------------
Homebrew is a popular open-source package management system for macOS.
`Homebrew`_ is a popular open-source package management system for macOS. For Linux users, `Linuxbrew`_ is a Linux port of that.
Installing pipenv via Homebrew will keep pipenv and all of its dependencies in
Installing pipenv via Homebrew or Linuxbrew will keep pipenv and all of its dependencies in
an isolated virtual environment so it doesn't interfere with the rest of your
Python installation.
Once you have installed `Homebrew`_ simply run::
Once you have installed Homebrew or Linuxbrew simply run::
$ brew install pipenv
+1
View File
@@ -0,0 +1 @@
Added support for ``--verbose`` output to ``pipenv run``.
+1
View File
@@ -0,0 +1 @@
Fix a bug that ``--site-packages`` flag is not recognized.
+1
View File
@@ -0,0 +1 @@
The inline tables won't be rewritten now.
+1
View File
@@ -0,0 +1 @@
Fix unhashable type error during ``$ pipenv install --selective-upgrade``
+1 -2
View File
@@ -70,7 +70,6 @@ def cli(
python=False,
help=False,
py=False,
site_packages=False,
envs=False,
man=False,
completion=False,
@@ -198,7 +197,7 @@ def cli(
)
ctx.abort()
# --two / --three was passed…
if (state.python or state.three is not None) or site_packages:
if (state.python or state.three is not None) or state.site_packages:
ensure_project(
three=state.three,
python=state.python,
+4 -1
View File
@@ -1829,7 +1829,7 @@ def do_install(
if not is_star(section[package__name]) and is_star(package__val):
# Support for VCS dependencies.
package_args[i] = convert_deps_to_pip(
{packages: section[package__name]}, project=project, r=False
{package__name: section[package__name]}, project=project, r=False
)[0]
except KeyError:
pass
@@ -2310,6 +2310,9 @@ def do_run(command, args, three=None, python=False, pypi_mirror=None):
try:
script = project.build_script(command, args)
cmd_string = ' '.join([script.command] + script.args)
if environments.is_verbose():
click.echo(crayons.normal("$ {0}".format(cmd_string)), err=True)
except ScriptEmptyError:
click.echo("Can't run script {0!r}-it's empty?", err=True)
if os.name == "nt":
+24 -11
View File
@@ -83,19 +83,32 @@ def cleanup_toml(tml):
def convert_toml_outline_tables(parsed):
"""Converts all outline tables to inline tables."""
if isinstance(parsed, tomlkit.container.Container):
empty_inline_table = tomlkit.inline_table
else:
empty_inline_table = toml.TomlDecoder().get_empty_inline_table
def convert_tomlkit_table(section):
for key, value in section._body:
if not key:
continue
if hasattr(value, "keys") and not isinstance(value, tomlkit.items.InlineTable):
table = tomlkit.inline_table()
table.update(value.value)
section[key.key] = table
def convert_toml_table(section):
for package, value in section.items():
if hasattr(value, "keys") and not isinstance(value, toml.decoder.InlineTableDict):
table = toml.TomlDecoder().get_empty_inline_table()
table.update(value)
section[package] = table
is_tomlkit_parsed = isinstance(parsed, tomlkit.container.Container)
for section in ("packages", "dev-packages"):
table_data = parsed.get(section, {})
for package, value in table_data.items():
if hasattr(value, "keys") and not isinstance(
value, (tomlkit.items.InlineTable, toml.decoder.InlineTableDict)
):
table = empty_inline_table()
table.update(value)
table_data[package] = table
if not table_data:
continue
if is_tomlkit_parsed:
convert_tomlkit_table(table_data)
else:
convert_toml_table(table_data)
return parsed
+1 -1
View File
@@ -68,7 +68,7 @@ class DebCommand(Command):
class UploadCommand(Command):
"""Support setup.py publish."""
"""Support setup.py upload."""
description = "Build and publish the package."
user_options = []
+14
View File
@@ -41,6 +41,20 @@ def test_pipenv_py(PipenvInstance):
assert os.path.basename(python).startswith('python')
@pytest.mark.cli
def test_pipenv_site_packages(PipenvInstance):
with PipenvInstance() as p:
c = p.pipenv('--python python --site-packages')
assert c.return_code == 0
assert 'Making site-packages available' in c.err
# no-global-site-packages.txt under stdlib dir should not exist.
c = p.pipenv('run python -c "import sysconfig; print(sysconfig.get_path(\'stdlib\'))"')
assert c.return_code == 0
stdlib_path = c.out.strip()
assert not os.path.isfile(os.path.join(stdlib_path, 'no-global-site-packages.txt'))
@pytest.mark.cli
def test_pipenv_support(PipenvInstance):
with PipenvInstance() as p:
+22
View File
@@ -446,3 +446,25 @@ def test_install_package_with_dots(PipenvInstance, pypi):
c = p.pipenv("install backports.html")
assert c.ok
assert "backports.html" in p.pipfile["packages"]
@pytest.mark.install
def test_rewrite_outline_table(PipenvInstance, pypi):
with PipenvInstance(pypi=pypi, chdir=True) as p:
with open(p.pipfile_path, 'w') as f:
contents = """
[packages]
six = {version = "*", editable = true}
[packages.requests]
version = "*"
""".strip()
f.write(contents)
c = p.pipenv("install -e click")
assert c.return_code == 0
with open(p.pipfile_path) as f:
contents = f.read()
assert "[packages.requests]" not in contents
assert 'six = {version = "*", editable = true}' in contents
assert 'requests = {version = "*"}' in contents
assert 'click = {' in contents
+1 -18
View File
@@ -148,24 +148,6 @@ six = {{version = "*", index = "pypi"}}
assert c.return_code == 0
@pytest.mark.install
@pytest.mark.project
def test_rewrite_outline_table(PipenvInstance, pypi):
with PipenvInstance(pypi=pypi, chdir=True) as p:
with open(p.pipfile_path, 'w') as f:
contents = """
[packages.requests]
version = "*"
""".strip()
f.write(contents)
c = p.pipenv('install click')
assert c.return_code == 0
with open(p.pipfile_path) as f:
contents = f.read()
assert "[packages.requests]" not in contents
assert 'requests = {version = "*"}' in contents
@pytest.mark.install
@pytest.mark.project
def test_include_editable_packages(PipenvInstance, pypi, testsroot, pathlib_tmpdir):
@@ -185,6 +167,7 @@ def test_include_editable_packages(PipenvInstance, pypi, testsroot, pathlib_tmpd
@pytest.mark.project
@pytest.mark.virtualenv
def test_run_in_virtualenv(PipenvInstance, pypi, virtualenv):
with PipenvInstance(chdir=True, pypi=pypi) as p:
os.environ.pop("PIPENV_IGNORE_VIRTUALENVS", None)