make install DESTDIR

A

aj

I am trying to install python with make install DESTDIR=/home/blah

../python -E ./setup.py install \
--prefix=/ \
--install-scripts=//bin \
--install-platlib=//lib/python2.6/lib-dynload \
--root=//home/blah
running install
running build
running build_ext
INFO: Can't locate Tcl/Tk libs and/or headers

Failed to find the necessary bits to build these modules:
_tkinter bsddb185 dl
imageop sunaudiodev
To find the necessary bits, look in setup.py in detect_modules() for
the module's name.

running build_scripts
running install_lib
creating /lib/python2.6
error: could not create '/lib/python2.6': Permission denied
make: *** [sharedinstall] Error 1
 
T

Thomas Jollans

I am trying to install python with make install DESTDIR=/home/blah
--prefix=/
....

creating /lib/python2.6
error: could not create '/lib/python2.6': Permission denied
make: *** [sharedinstall] Error 1

Obviously, the flags you specified didn't have the effect you intended.

--prefix=$HOME

should do the trick.
 
A

aj

I am trying to install python with make install DESTDIR=/home/blah
                --prefix=/
...

creating /lib/python2.6
error: could not create '/lib/python2.6': Permission denied
make: *** [sharedinstall] Error 1

Obviously, the flags you specified didn't have the effect you intended.

  --prefix=$HOME

should do the trick.

The whole point of DESTDIR is that it should be prepended to all
installed paths, but the binaries should not contain any references to
it.DESTDIR is commonly used by packagers, for example, to allow
installation without superuser privileges.
 
T

Thomas Jollans

I am trying to install python with make install DESTDIR=/home/blah

--prefix=/
...

creating /lib/python2.6
error: could not create '/lib/python2.6': Permission denied
make: *** [sharedinstall] Error 1

Obviously, the flags you specified didn't have the effect you intended.

--prefix=$HOME

should do the trick.

The whole point of DESTDIR is that it should be prepended to all
installed paths, but the binaries should not contain any references to
it.DESTDIR is commonly used by packagers, for example, to allow
installation without superuser privileges.

Sorry, that feature slipped my mind.

So, are you running
$ make install DESTDIR=/home/foo/bar

or are you trying to directly run setup.py? I just tried and use make worked
for me. (though I was in a Python 3.2 dev source tree, not 2.6 -- maybe this
was a bug that has been fixed?)
 
M

Martin v. Loewis

The whole point of DESTDIR is that it should be prepended to all
installed paths, but the binaries should not contain any references to
it.DESTDIR is commonly used by packagers, for example, to allow
installation without superuser privileges.

So what is the point of your messages? Do you want to report a problem?
Are you asking for help? Do you want to vent frustration?

Regards,
Martin
 
A

aj

Thanks for reply Thomas. I am running make install DESTDIR=/home/foo/
bar.
Martin- Asking for help :)
 
M

Martin v. Loewis

Martin- Asking for help :)

Ok. Please try the patch below.

If this works, please make a bug report.

Regards,
Martin

Index: Lib/distutils/util.py
===================================================================
--- Lib/distutils/util.py (Revision 84197)
+++ Lib/distutils/util.py (Arbeitskopie)
@@ -220,7 +220,7 @@
if not os.path.isabs(pathname):
return os.path.join(new_root, pathname)
else:
- return os.path.join(new_root, pathname[1:])
+ return os.path.join(new_root, pathname.lstrip('/'))

elif os.name == 'nt':
(drive, path) = os.path.splitdrive(pathname)
 
A

aj

Martin- Asking for help :)

Ok. Please try the patch below.

If this works, please make a bug report.

Regards,
Martin

Index: Lib/distutils/util.py
===================================================================
--- Lib/distutils/util.py       (Revision 84197)
+++ Lib/distutils/util.py       (Arbeitskopie)
@@ -220,7 +220,7 @@
         if not os.path.isabs(pathname):
             return os.path.join(new_root, pathname)
         else:
-            return os.path.join(new_root, pathname[1:])
+            return os.path.join(new_root, pathname.lstrip('/'))

     elif os.name == 'nt':
         (drive, path) = os.path.splitdrive(pathname)

Thanks Martin. That seems to work. I will file a bug report. Also, can
you describe what the problem was?
 
M

Martin v. Loewis

Thanks Martin. That seems to work. I will file a bug report. Also, can
you describe what the problem was?

If you have / as the prefix, you get two leading slashes, e.g. for
//lib/python2.x. Any other prefix would have given you only a single
slash: e.g. if it had been /usr, then you end up with /usr/lib/python2.x.

Now, the code strips the first character to make it a relative path name
(so that join can be used), which fails to work correctly if there are
two leading slashes.

HTH,
Martin
 
A

aj

If you have / as the prefix, you get two leading slashes, e.g. for
//lib/python2.x. Any other prefix would have given you only a single
slash: e.g. if it had been /usr, then you end up with /usr/lib/python2.x.

Now, the code strips the first character to make it a relative path name
(so that join can be used), which fails to work correctly if there are
two leading slashes.

HTH,
Martin
Thanks a lot for the help Martin. I have created http://bugs.python.org/issue9674
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,582
Members
45,066
Latest member
VytoKetoReviews

Latest Threads

Top