Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
edx-platform
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
edx-platform
Commits
526db729
Commit
526db729
authored
Feb 23, 2016
by
Ned Batchelder
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
A better way to manage the Python packages to uninstall.
parent
25919f7d
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
45 additions
and
27 deletions
+45
-27
pavelib/prereqs.py
+45
-27
No files found.
pavelib/prereqs.py
View file @
526db729
...
...
@@ -5,11 +5,12 @@ Install Python and Node prerequisites.
from
distutils
import
sysconfig
import
hashlib
import
os
import
re
import
sys
from
paver.easy
import
sh
,
task
from
.utils.envs
import
Env
import
sys
PREREQS_STATE_DIR
=
os
.
getenv
(
'PREREQ_CACHE_DIR'
,
Env
.
REPO_ROOT
/
'.prereqs_cache'
)
...
...
@@ -151,6 +152,16 @@ def install_node_prereqs():
prereq_cache
(
"Node prereqs"
,
[
"package.json"
],
node_prereqs_installation
)
# To add a package to the uninstall list, just add it to this list! No need
# to touch any other part of this file.
PACKAGES_TO_UNINSTALL
=
[
"South"
,
# Because it interferes with Django 1.8 migrations.
"edxval"
,
# Because it was bork-installed somehow.
"django-storages"
,
"django-oauth2-provider"
,
# Because now it's called edx-django-oauth2-provider.
]
@task
def
uninstall_python_packages
():
"""
...
...
@@ -162,14 +173,18 @@ def uninstall_python_packages():
them.
"""
# So that we don't constantly uninstall things, use a version number of the
# uninstallation needs. Check it, and skip this if we're up to date.
expected_version
=
3
state_file_path
=
os
.
path
.
join
(
PREREQS_STATE_DIR
,
"python_uninstall_version.txt"
)
# So that we don't constantly uninstall things, use a hash of the packages
# to be uninstalled. Check it, and skip this if we're up to date.
hasher
=
hashlib
.
sha1
()
hasher
.
update
(
repr
(
PACKAGES_TO_UNINSTALL
))
expected_version
=
hasher
.
hexdigest
()
state_file_path
=
os
.
path
.
join
(
PREREQS_STATE_DIR
,
"Python_uninstall.sha1"
)
if
os
.
path
.
isfile
(
state_file_path
):
with
open
(
state_file_path
)
as
state_file
:
version
=
int
(
state_file
.
read
()
)
version
=
state_file
.
read
(
)
if
version
==
expected_version
:
print
'Python uninstalls unchanged, skipping...'
return
# Run pip to find the packages we need to get rid of. Believe it or not,
...
...
@@ -177,27 +192,13 @@ def uninstall_python_packages():
# to really really get rid of it.
for
_
in
range
(
3
):
uninstalled
=
False
frozen
=
sh
(
"pip freeze"
,
capture
=
True
)
.
splitlines
()
# Uninstall South
if
any
(
line
.
startswith
(
"South"
)
for
line
in
frozen
):
sh
(
"pip uninstall --disable-pip-version-check -y South"
)
uninstalled
=
True
# Uninstall edx-val
if
any
(
"edxval"
in
line
for
line
in
frozen
):
sh
(
"pip uninstall --disable-pip-version-check -y edxval"
)
uninstalled
=
True
# Uninstall django-storages
if
any
(
"django-storages=="
in
line
for
line
in
frozen
):
sh
(
"pip uninstall --disable-pip-version-check -y django-storages"
)
uninstalled
=
True
frozen
=
sh
(
"pip freeze"
,
capture
=
True
)
# Uninstall django-oauth2-provider
if
any
(
line
.
startswith
(
"django-oauth2-provider=="
)
for
line
in
frozen
):
sh
(
"pip uninstall --disable-pip-version-check -y django-oauth2-provider"
)
uninstalled
=
True
for
package_name
in
PACKAGES_TO_UNINSTALL
:
if
package_in_frozen
(
package_name
,
frozen
):
# Uninstall the pacakge
sh
(
"pip uninstall --disable-pip-version-check -y {}"
.
format
(
package_name
))
uninstalled
=
True
if
not
uninstalled
:
break
...
...
@@ -208,7 +209,24 @@ def uninstall_python_packages():
# Write our version.
with
open
(
state_file_path
,
"w"
)
as
state_file
:
state_file
.
write
(
str
(
expected_version
))
state_file
.
write
(
expected_version
)
def
package_in_frozen
(
package_name
,
frozen_output
):
"""Is this package in the output of 'pip freeze'?"""
# Look for either:
#
# PACKAGE-NAME==
#
# or:
#
# blah_blah#egg=package_name-version
#
pattern
=
r"(?mi)^{pkg}==|#egg={pkg_under}-"
.
format
(
pkg
=
re
.
escape
(
package_name
),
pkg_under
=
re
.
escape
(
package_name
.
replace
(
"-"
,
"_"
)),
)
return
bool
(
re
.
search
(
pattern
,
frozen_output
))
@task
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment