- Adds
--python-shebang
option to the pex tool in order to set the#!
shebang to an exact path. #53. - Adds support for
PEX_PYTHON
environment variable which will cause the pex file to reinvoke itself using the interpreter specified, e.g.PEX_PYTHON=python3.4
orPEX_PYTHON=/exact/path/to/interpreter
. #27. - Adds support for
PEX_PATH
environment variable which allows merging of PEX environments at runtime. This can be used to inject plugins or entry_points or modules from one PEX into another without explicitly building them together. #30. - Consolidates documentation of
PEX_
environment variables and adds the--help-variables
option to the pex client. Partially addresses #13. - Bug fix:
PEX_COVERAGE
andPEX_PROFILE
did not function correctly when SystemExit was raised. Fixes #81. - Adds helper method to dump a package subdirectory onto disk from within a zipped PEX file. This can be useful for applications that know they're running within a PEX and would prefer some static assets dumped to disk instead of running as an unzipped PEX file. #12.
- Now supports extras for static URLs and installable directories. #65.
- BREAKING CHANGE: Removes the
-s
option in favor of specifying directories directly as arguments to the pex command line. - Fixes caching in the PEX tool since we don't cache the source distributions of installable directories. #24.
- Adds
-m
and--entry-point
alias to the existing-e
option for entry points in the pex tool to evoke the similarity topython -m
. - Adds console script support via
-c/--script/--console-script
andPEX_SCRIPT
. This allows you to reference the named entry point instead of the exactmodule:name
pair. Also supports scripts defined in thescripts
section of setup.py. #59.
- Adds a number of flag aliases to be more compatible with pip command lines:
--no-index
,-f
,--find-links
,--index-url
,--no-use-wheel
. Removes-p
in favor of-o
exclusively. - BREAKING CHANGE:
pex -r
now takes requirements.txt filenames and not requirement specs. Requirement specs are now passed as arguments to the pex tool. Use--
to escape command line arguments passed to interpreters spawned by pex. Implements #5.
This is the last release before the 1.0.0 development branch is started.
- Change the setuptools range to >=2.2,<16 by handling EntryPoint changes as well as
being flexible on whether
pkg_resources
is a package or a module. Fixes #55 and #34. - Adds option groups to the pex tool to make the help output slightly more readable.
- Bug fix: Make
pip install pex
work better by removingextras_requires
on theconsole_script
entry point. Fixes #48 - New feature: Adds an interpreter cache to the
pex
tool. If the user does not explicitly disable the wheel feature and attempts to build a pex with wheels but does not have the wheel package installed, pex will download it in order to make the feature work. Implements #47 in order to fix #48
- Bug fix: Honor installed sys.excepthook in pex teardown. RB #1733
- Bug fix:
UrllibContext
usedreplace
as a keyword argument forbytes.decode
but this only works on Python 3. Pull Request #46
- Bug fix: Fixup string formatting in pex/bin/pex.py to support Python 2.6 Pull Request #40
- Performance improvement: Speed up the best-case scenario of dependency resolution. RB #1685
- Bug fix: Change from
uuid4().get_hex()
touuid4().hex
to maintain Python3 compatibility of pex.common. Pull Request #39 - Bug fix: Actually cache the results of translation. Previously bdist translations would be created in a temporary directory even if a cache location was specified. RB #1666
- Bug fix: Support all potential abi tag permutations when determining platform compatibility. Pull Request #33
- Performance improvement: Don't always write packages to disk if they've already been cached. This can significantly speed up launching PEX files with a large number of non-zip-safe dependencies. RB #1642
- Bug fix: Allow pex 0.8.x to parse pex files produced by earlier versions of pex and twitter.common.python.
- Pin pex to setuptools prior to 9.x until we have a chance to make changes related to PEP440 and the change of pkg_resources.py to a package.
- Bug fix: Fix issue where it'd be possible to
os.path.getmtime
on a remoteLink
object Issue #29
- API change: Decouple translation from package iteration. This removes
the Obtainer construct entirely, which likely means if you're using PEX as
a library, you will need to change your code if you were doing anything
nontrivial. This adds a couple new options to
resolve
but simplifies the story around how to cache packages. RB #785 - Refactor http handling in pex to allow for alternate http implementations. Adds support for requests, improving both performance and security. For more information, read the commit notes at 91c7f32. RB #778
- Improvements to API documentation throughout.
- Renamed
Tracer
toTraceLogger
to prevent nondeterministic isort ordering. - Refactor tox.ini to increase the number of environment combinations and improve coverage.
- Adds HTTP retry support for the RequestsContext. RB #1303
- Make pex --version correct. Issue #19
- Bug fix: Fix over-aggressive sys.modules scrubbing for namespace packages. Under certain circumstances, namespace packages in site-packages could conflict with packages within a PEX, causing them to fail importing. RB #1378
- Bug fix: Replace uses of
os.unsetenv(...)
withdel os.environ[...]
Pull Request #11 - Bug fix: Scrub sys.path and sys.modules based upon both supplied path and realpath of files and directories. Newer versions of virtualenv on Linux symlink site-packages which caused those packages to not be removed from sys.path correctly. Issue #21
- Bug fix: The pex -s option was not correctly pulling in transitive dependencies. Issue #22
- Bug fix: Adds
content
method to HTTP contexts that does HTML content decoding, fixing an encoding issue only experienced when using Python 3. Issue #10
- Rename
twitter.common.python
topex
and split out from the twitter/commons repo.
- Change the interpretation of
-i
(and of PyPIFetcher's pypi_base) to match pip's-i
. This is useful for compatibility with devpi.
Ensures that .egg/.whl distributions on disk have their mtime updated even though we no longer overwrite them. This gives them a new time lease against their ttl.
Without this change, once a distribution aged past the ttl it would never be used again, and builds would re-create the same distributions in tmpdirs over and over again.
Fixes an issue where SourceTranslator would overwrite .egg/.whl distributions already on disk. Instead it should always check to see if a copy already exists and reuse if there.
This ordinarily should not be a problem but the zipimporter caches metadata by filename instead of stat/sha, so if the underlying contents changed a runtime error would be thrown due to seemingly corrupt zip file offsets. RB #684
- Adds
-i/--index
option to the pex tool.
- Adds
twitter.common.python.pex_bootstrap
bootstrap_pex_env
function in order to initialize a PEX environment from within a python interpreter. (Patch contributed by @kwlzn) - Adds stdin=,stdout=,stderr= keyword parameters to the
PEX.run
function. (Patch from @benjy)
- The crawler now defaults to not follow links for security reasons.
(Before the default behavior was to implicitly
--follow-links
for all requirements.) RB #293
- Improves scrubbing of site-packages from PEX environments. RB #289
- Silences exceptions reported during interpreter teardown (the exceptions resulting from incorrect atexit handler behavior) introduced by 0.4.3 RB #253 RB #249
- Adds
__hash__
toLink
so that Packages are hashed correctly intwitter.common.python.resolver
resolve
- Adds
twitter.common.python.finders
which are additional finders for setuptools including: - find eggs within a .zip - find wheels within a directory - find wheels within a .zip RB #86 - Adds a new Package abstraction by refactoring Link into Link and Package. RB #92
- Adds support for PEP425 tagging necessary for wheel support. RB #87
- Improves python environment isolation by correctly scrubbing namespace
packages injected into module
__path__
attributes by nspkg pth files. RB #116 - Adds
twitter.common.python.resolver
resolve
method that handles transitive dependency resolution better. This means that if the requirementfutures==2.1.2
and an unqualifiedfutures>=2
is pulled in transitively, our resolver will correctly resolve futures 2.1.2 instead of reporting a VersionConflict if any version newer than 2.1.2 is available. RB #129 - Factors all
twitter.common.python
test helpers intotwitter.common.python.testing
RB #91 - Bug fix: Fix
OrderedSet
atexit exceptions RB #147 - Bug fix: Fix cross-device symlinking (patch from @benjy)
- Bug fix: Raise a
RuntimeError
if we fail to writepkg_resources
into a .pex RB #115
- Upgrade to
setuptools>=1
twitter.common.python
is no longer a namespace package
- Kill the egg distiller. We now delegate .egg generation to bdist_egg. RB #55
- Short-circuit resolving a distribution if a local exact match is found. RB #47
- Correctly patch the global
pkg_resources
WorkingSet
for the lifetime of the Python interpreter. RB #52 - Fixes a performance regression in setuptools
build_zipmanifest
Setuptools Issue #154 RB #53
- Plumb through the
--zip-safe
,--always-write-cache
,--ignore-errors
and--inherit-path
flags to the pex tool. - Delete the unused
PythonDirWrapper
code. - Split
PEXEnvironment
resolution intotwitter.common.python.environment
and deconflateWorkingSet
/Environment
state. - Removes the monkeypatched zipimporter in favor of keeping all eggs
unzipped within PEX files. Refactors the PEX dependency cache in
util.py
- Adds interpreter detection for Jython and PyPy.
- Dependency translation errors should be made uniform. (Patch from @johnsirois)
- Adds
PEX_PROFILE_ENTRIES
to limit the number of entries reported whenPEX_PROFILE
is enabled. (Patch from @rgs_) - Bug fix: Several fixes to error handling in
twitter.common.python.http
(From Marc Abramowitz) - Bug fix: PEX should not always assume that
$PATH
was available. (Patch from @jamesbroadhead) - Bug fix: Filename should be part of the .pex cache key or else multiple identical versions will incorrectly resolve (Patch from @tc)
- Bug fix: Executed entry points shouldn't be forced to run in an
environment with
__future__
imports enabled. (Patch from @lawson_patrick) - Bug fix: Detect versionless egg links and fail fast. (Patch from @johnsirois.)
- Bug fix: Handle setuptools>=2.1 correctly in the zipimport monkeypatch (Patch from @johnsirois.)
- Bug fix: Fix handling of Fetchers with
file://
urls.
- Adds the pex tool as a standalone tool.
- Bug fix: Bootstrapped
twitter.common.python
should declaretwitter.common
as a namespace package.
- Make
twitter.common.python
fully standalone by consolidating external dependencies withintwitter.common.python.common
.
- Initial published version of
twitter.common.python
.