Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
cpython
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
Batuhan Osman TASKAYA
cpython
Commits
ec6229e3
Kaydet (Commit)
ec6229e3
authored
Haz 25, 2004
tarafından
Fred Drake
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
Make distutils "install --home" support all platforms.
üst
8d726eef
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
96 additions
and
34 deletions
+96
-34
inst.tex
Doc/inst/inst.tex
+21
-17
install.py
Lib/distutils/command/install.py
+17
-17
test_install.py
Lib/distutils/tests/test_install.py
+55
-0
NEWS
Misc/NEWS
+3
-0
No files found.
Doc/inst/inst.tex
Dosyayı görüntüle @
ec6229e3
...
...
@@ -384,26 +384,26 @@ install files. The details differ across platforms, so read whichever
of the following sections applies to you.
\subsection
{
Alternate installation:
\UNIX
{}
(the home scheme)
}
\subsection
{
Alternate installation:
the home scheme
}
\label
{
alt-install-prefix
}
Under
\UNIX
, there are two ways to perform an alternate installation.
The ``prefix scheme'' is similar to how alternate installation works
under Windows and Mac OS, but is not necessarily the most useful way to
maintain a personal Python library. Hence, we document the more
convenient and commonly useful ``home scheme'' first.
The idea behind the ``home scheme'' is that you build and maintain a
personal stash of Python modules, probably under your home directory.
personal stash of Python modules. This scheme's name is derived from
the idea of a ``home'' directory on
\UNIX
, since it's not unusual for
a
\UNIX
{}
user to make their home directory have a layout similar to
\file
{
/usr/
}
or
\file
{
/usr/local/
}
. This scheme can be used by
anyone, regardless of the operating system their installing for.
Installing a new module distribution is as simple as
\begin{verbatim}
python setup.py install --home=<dir>
\end{verbatim}
where you can supply any directory you like for the
\longprogramopt
{
home
}
option. Lazy typists can just type a tilde (
\code
{
\textasciitilde
}
); the
\command
{
install
}
command will expand this to your home directory:
where you can supply any directory you like for the
\longprogramopt
{
home
}
option. On
\UNIX
, lazy typists can just type a
tilde (
\code
{
\textasciitilde
}
); the
\command
{
install
}
command will
expand this to your home directory:
\begin{verbatim}
python setup.py install --home=~
...
...
@@ -417,6 +417,11 @@ installation base as follows:
{
home
}{
/bin
}
{
home
}{
/share
}
\versionchanged
[The
\longprogramopt
{
home
}
option used to be supported
only on
\UNIX
]
{
2.4
}
\subsection
{
Alternate installation:
\UNIX
{}
(the prefix scheme)
}
\label
{
alt-install-home
}
...
...
@@ -491,14 +496,13 @@ your \longprogramopt{prefix} and \longprogramopt{exec-prefix} don't even
point to an alternate Python installation, this is immaterial.)
\subsection
{
Alternate installation: Windows
}
\subsection
{
Alternate installation: Windows
(the prefix scheme)
}
\label
{
alt-install-windows
}
Since Windows has no conception of a user's home directory, and since
the standard Python installation under Windows is simpler than that
under
\UNIX
, there's no point in having separate
\longprogramopt
{
prefix
}
and
\longprogramopt
{
home
}
options. Just use the
\longprogramopt
{
prefix
}
option to specify a base directory, e.g.
Windows has no concept of a user's home directory, and since the
standard Python installation under Windows is simpler than under
\UNIX
, the
\longprogramopt
{
prefix
}
option has traditionally been used
to install additional packages in separate locations on Windows.
\begin{verbatim}
python setup.py install --prefix="
\Temp\Python
"
...
...
Lib/distutils/command/install.py
Dosyayı görüntüle @
ec6229e3
...
...
@@ -242,19 +242,15 @@ class install (Command):
(
"must supply either prefix/exec-prefix/home or "
+
"install-base/install-platbase -- not both"
)
if
self
.
home
and
(
self
.
prefix
or
self
.
exec_prefix
):
raise
DistutilsOptionError
,
\
"must supply either home or prefix/exec-prefix -- not both"
# Next, stuff that's wrong (or dubious) only on certain platforms.
if
os
.
name
==
'posix'
:
if
self
.
home
and
(
self
.
prefix
or
self
.
exec_prefix
):
raise
DistutilsOptionError
,
\
(
"must supply either home or prefix/exec-prefix -- "
+
"not both"
)
else
:
if
os
.
name
!=
"posix"
:
if
self
.
exec_prefix
:
self
.
warn
(
"exec-prefix option ignored on this platform"
)
self
.
exec_prefix
=
None
if
self
.
home
:
self
.
warn
(
"home option ignored on this platform"
)
self
.
home
=
None
# Now the interesting logic -- so interesting that we farm it out
# to other methods. The goal of these methods is to set the final
...
...
@@ -405,15 +401,19 @@ class install (Command):
def
finalize_other
(
self
):
# Windows and Mac OS for now
if
self
.
prefix
is
None
:
self
.
prefix
=
os
.
path
.
normpath
(
sys
.
prefix
)
if
self
.
home
is
not
None
:
self
.
install_base
=
self
.
install_platbase
=
self
.
home
self
.
select_scheme
(
"unix_home"
)
else
:
if
self
.
prefix
is
None
:
self
.
prefix
=
os
.
path
.
normpath
(
sys
.
prefix
)
self
.
install_base
=
self
.
install_platbase
=
self
.
prefix
try
:
self
.
select_scheme
(
os
.
name
)
except
KeyError
:
raise
DistutilsPlatformError
,
\
"I don't know how to install stuff on '
%
s'"
%
os
.
name
self
.
install_base
=
self
.
install_platbase
=
self
.
prefix
try
:
self
.
select_scheme
(
os
.
name
)
except
KeyError
:
raise
DistutilsPlatformError
,
\
"I don't know how to install stuff on '
%
s'"
%
os
.
name
# finalize_other ()
...
...
Lib/distutils/tests/test_install.py
0 → 100644
Dosyayı görüntüle @
ec6229e3
"""Tests for distutils.command.install."""
import
os
import
unittest
from
distutils.command.install
import
install
from
distutils.core
import
Distribution
from
distutils.tests
import
support
class
InstallTestCase
(
support
.
TempdirManager
,
unittest
.
TestCase
):
def
test_home_installation_scheme
(
self
):
# This ensure two things:
# - that --home generates the desired set of directory names
# - test --home is supported on all platforms
builddir
=
self
.
mkdtemp
()
destination
=
os
.
path
.
join
(
builddir
,
"installation"
)
dist
=
Distribution
({
"name"
:
"foopkg"
})
# script_name need not exist, it just need to be initialized
dist
.
script_name
=
os
.
path
.
join
(
builddir
,
"setup.py"
)
dist
.
command_obj
[
"build"
]
=
support
.
DummyCommand
(
build_base
=
builddir
,
build_lib
=
os
.
path
.
join
(
builddir
,
"lib"
),
)
cmd
=
install
(
dist
)
cmd
.
home
=
destination
cmd
.
ensure_finalized
()
self
.
assertEqual
(
cmd
.
install_base
,
destination
)
self
.
assertEqual
(
cmd
.
install_platbase
,
destination
)
def
check_path
(
got
,
expected
):
got
=
os
.
path
.
normpath
(
got
)
expected
=
os
.
path
.
normpath
(
expected
)
self
.
assertEqual
(
got
,
expected
)
libdir
=
os
.
path
.
join
(
destination
,
"lib"
,
"python"
)
check_path
(
cmd
.
install_lib
,
libdir
)
check_path
(
cmd
.
install_platlib
,
libdir
)
check_path
(
cmd
.
install_purelib
,
libdir
)
check_path
(
cmd
.
install_headers
,
os
.
path
.
join
(
destination
,
"include"
,
"python"
,
"foopkg"
))
check_path
(
cmd
.
install_scripts
,
os
.
path
.
join
(
destination
,
"bin"
))
check_path
(
cmd
.
install_data
,
destination
)
def
test_suite
():
return
unittest
.
makeSuite
(
InstallTestCase
)
if
__name__
==
"__main__"
:
unittest
.
main
(
defaultTest
=
"test_suite"
)
Misc/NEWS
Dosyayı görüntüle @
ec6229e3
...
...
@@ -365,6 +365,9 @@ Library
-
refactored
site
.
py
into
functions
.
Also
wrote
regression
tests
for
the
module
.
-
The
distutils
install
command
now
supports
the
--
home
option
and
installation
scheme
for
all
platforms
.
-
The
distutils
sdist
command
now
ignores
all
.
svn
directories
,
in
addition
to
CVS
and
RCS
directories
.
.
svn
directories
hold
administrative
files
for
the
Subversion
source
control
system
.
...
...
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