Làm cách nào để cài đặt Python 3.3?


103

Tôi đã tải xuống Python 3.3 từ trang web chính thức nhưng không biết làm thế nào để cài đặt nó.

Tôi đang sử dụng Ubuntu 12.04


Tại sao tôi không thể cập nhật ứng dụng mà không nâng cấp toàn bộ HĐH? giải thích tại sao nó không có sẵn Nói tóm lại: các gói khác đang dựa vào phiên bản cũ hơn (vẫn được duy trì!). Và hãy giữ suy nghĩ cá nhân của bạn về cách trang web này hoạt động cho chính bạn hoặc đăng nó lên meta nơi bạn có thể đăng một khi bạn đã đạt đủ điểm danh tiếng . Nhưng trước tiên: Câu hỏi thường gặp về cách trang web hoạt động.
gertvdijk

Câu trả lời:


113

Python 3.3 đã được phát hành vào ngày 29 tháng 9 năm 2012, vài tháng sau khi Ubuntu 12.04 được phát hành. Nó được bao gồm trong Ubuntu 12.10 mặc dù là python3.3gói

Nếu bạn muốn cài đặt Python 3.3 trên phiên bản Ubuntu không có trong kho của nó, bạn có các tùy chọn sau:

Sử dụng PPA

Có một PPA chứa các phiên bản Python cũ và mới được duy trì bởi Felix Krull. Xem câu trả lời của Luper Rouch để biết hướng dẫn cài đặt.

Biên dịch Python từ nguồn

Điều này rất dễ dàng và cho phép bạn có nhiều phiên bản Python mà không gặp rắc rối với trình thông dịch python hệ thống (được sử dụng bởi rất nhiều chương trình riêng của Ubuntu). Trên máy dev của tôi, tôi có hàng tá phiên bản Python khác nhau từ 2.4 đến 3.2 sống hạnh phúc /opt.

chúng ta cần trình biên dịch C và các công cụ khác để biên dịch Python

sudo apt-get install build-essential

Các lib SQLite cần được cài đặt để Python có hỗ trợ SQLite.

sudo apt-get install libsqlite3-dev
sudo apt-get install sqlite3 # for the command-line client
sudo apt-get install bzip2 libbz2-dev

Tải xuống và biên dịch Python:

wget http://www.python.org/ftp/python/3.3.5/Python-3.3.5.tar.xz
tar xJf ./Python-3.3.5.tar.xz
cd ./Python-3.3.5
./configure --prefix=/opt/python3.3
make && sudo make install

Một số chi tiết thú vị để cài đặt pylệnh bằng cách tạo liên kết tượng trưng:

mkdir ~/bin
ln -s /opt/python3.3/bin/python3.3 ~/bin/py

Ngoài ra, bạn có thể cài đặt một bí danh bash có tên pythay thế:

echo 'alias py="/opt/python3.3/bin/python3.3"' >> .bashrc

Và đây là nó. Bây giờ bạn có thể có bất kỳ phiên bản Python nào , thậm chí là bản alpha, hoặc, giả sử, có một vài bản sao Python 3.3 được biên dịch với các cài đặt khác nhau ... không phải là nhiều người cần điều đó :)

Sử dụng pyenv

Có một phần mềm gọi là pyenv có thể giúp bạn tự động hóa quy trình - những gì nó thực hiện là biên dịch Python từ nguồn, cài đặt nó trong thư mục chính của bạn. Mục tiêu của nó là giúp bạn quản lý nhiều phiên bản Python.


1
Sau khi cài đặt, làm thế nào một người sẽ sử dụng cài đặt Python thay thế này? Giả sử tôi có một số .pytệp với #!/usr/bin/env pythondòng shebang (tập bit thực thi), làm cách nào để chúng sử dụng cài đặt này /opt/python3.3mà không sửa đổi tất cả chúng? Hoặc thậm chí những người cài đặt hệ thống.
gertvdijk

1
@gertvdijk: toàn bộ vấn đề không phải là thay thế trình thông dịch mặc định - nếu bạn làm điều đó, thì mọi ứng dụng python chạy từ tài khoản của bạn sẽ sử dụng Python 3.3, bao gồm các ứng dụng Ubuntu, chẳng hạn như Trung tâm phần mềm. Chúng tôi không muốn điều đó. Để chạy tập lệnh, chỉ cần sử dụng py myscript.py(nơi pylà một liên kết tượng trưng mà chúng tôi đã tạo ở cuối bài tập). Tôi cũng thường sử dụng virtualenv hoặc buildout cho các dự án của mình.
Serge

1
@gertvdijk Bạn có thể quản lý nhiều môi trường python bằng virtualenv.
flup

@gertvdijk Bạn có biết rằng python 3.x và python 2.x không tương thích? Nếu bạn đã trỏ tất cả các tập lệnh hiện có của mình vào python 3.3 thì chúng có thể bị hỏng. Đơn giản chỉ cần shebang các kịch bản python mới của bạn là #! /opt/python3.3 và trình thông dịch chính xác sẽ được xử lý khi bạn chạy nó.
Tony Martin

1
mkdir ~/bin ln -s /opt/python3.3/bin/python ~/bin/pykhông làm việc cho tôi. Tôi thấy rằng /opt/python3.3/bin/pythonnên /opt/python3.3/bin/python3, nhưng vẫn nhận được py: command not found. Bất kỳ đề xuất.

43

Đây là những gì tôi đã làm để cài đặt Python 3.3 trên Ubuntu 12.04:

  1. Cài đặt phụ thuộc:

    sudo apt-get build-dep python3.2
    sudo apt-get install libreadline-dev libncurses5-dev libssl1.0.0 tk8.5-dev zlib1g-dev liblzma-dev
    
  2. Tải xuống Python 3.3.0:

    wget http://python.org/ftp/python/3.3.0/Python-3.3.0.tgz
  3. Trích xuất:

    tar xvfz Python-3.3.0.tgz
  4. Cấu hình và cài đặt:

    cd Python-3.3.0
    ./configure --prefix=/opt/python3.3
    make  
    sudo make install
    
  5. Kiểm tra nếu nó hoạt động:

    /opt/python3.3/bin/python3

Bạn sẽ thấy một cái gì đó tương tự:

Python 3.3.0 (default, Jan 31 2013, 18:37:42) 
[GCC 4.6.3] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 

Một số điều bổ sung hữu ích ... bạn có thể tạo một môi trường ảo trong nhà của mình và chỉ cần kích hoạt Python 3.3 theo yêu cầu ..

  1. Tạo một môi trường ảo trong nhà của bạn:

    /opt/python3.3/bin/pyvenv ~/py33
  2. Kích hoạt virtualenv:

    source ~/py33/bin/activate
  3. Cài đặt công cụ phân phối:

    wget http://python-distribute.org/distribute_setup.py
    python distribute_setup.py
    
  4. Cài đặt pip:

    easy_install pip
  5. Cài đặt bất kỳ gói python nào bạn muốn (ví dụ như chai)

    pip install bottle

Thưởng thức!


sudo apt-get build-dep python3.2? Có lẽ bạn đã quên installở giữa :)
Stam Kaly

1
@StamKaly: không. build-depkhông phải là một gói, nó là một apt-get động từ (như install). Nó có nghĩa là " cài đặt tất cả các gói cần thiết để xây dựng (các) gói nguồn được yêu cầu "
MestreLion

35

Các deadsnakes PPA có gói cho các phiên bản python cũ và mới:

sudo apt-get install python-software-properties
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get update
sudo apt-get install python3.3

Vâng, nó đã cài đặt một cái gì đó ổn, nhưng làm thế nào để tôi gọi nó? Việc gõ 'python' cung cấp cho trình thông dịch methe python 2 và gõ 'python3' gợi ý rằng nó chưa được cài đặt và có thể được cài đặt từ các repos ub Ubuntu.
kris

À..Tôi thấy tệp thực thi được gọi là python3.3 (hoặc pythonX.Y, cho bất kỳ phiên bản nào của python được cài đặt :-)
kris

ppa: fkrull / dowsnakes được lưu trữ. Sử dụng ppa: dowsnakes / ppa thay thế.
codefool

10

Ubuntu 14.04 trở về trước:

Python2.7 được mặc định, Sử dụng trình quản lý gói để cài đặt python3 trên đầu python thông thường trên Ubuntu, Ubuntu có thể xử lý cả 2.7 và 3.2 cùng lúc mà không cần virtualenv:

sudo apt-get install python3
python3 --version
Python 3.2.3
python --version
Python 2.2.3

Ubuntu 18.04:

Python3 được mặc định với HĐH và Python2.7 không khả dụng trừ khi bạn cài đặt cụ thể.

Ba tên gói để lựa chọn: python, python-minimal, python-all. Mặc định là tối thiểu. Những từ này chỉ là cờ cho các kho lưu trữ Ubuntu để bao gồm các công cụ bổ sung hoặc không. Để xem chính xác các gói con là gì và không được bao gồm, hãy đi sâu vào các gói con của: https://packages.ubfox.com/bionic/python

sudo apt install python-minimal
python --version

Hoặc để thử nâng cấp python3:

sudo apt install python3-minimal
python --version

Để thử buộc một phiên bản cụ thể, bạn có thể thử truyền tham số phiên bản:

sudo apt-get install python 3.3.3

1
Làm thế nào để bạn cập nhật phiên bản python3 từ 3.2.3 lên 3.3.5?
anon58192932

2
Python 3.3 chỉ có sẵn từ kho lưu trữ mặc định trong Ubuntu 12.10 trở lên. OP đang sử dụng 12.04
Lenna

Nếu bạn muốn có nhiều hơn 2 phiên bản python có sẵn trên một máy tính (trừ 2.7 và 3.2 mặc định mà HĐH của bạn chọn cho bạn), thì mỗi phiên bản python mới phải ở trong môi trường ảo riêng ( virtualenv). Tìm kiếm trên Google: "Sử dụng virtualenv để cô lập phiên bản python". Nếu bạn không sử dụng một loại vật chứa nào đó, thì bạn sẽ phơi bày ra một mê cung các vấn đề vì trăn có một đống rác khổng lồ trên máy tính của bạn, chiếm giữ mọi ngóc ngách và chúng chiến đấu với nhau theo kiểu John Cleeseian.
Eric Leschinski


1

Tôi đã viết một tập lệnh để tự động hóa tất cả việc tải xuống, biên dịch và cài đặt các phiên bản Python không gói. Kịch bản cài đặt phiên bản Python /optmột cách an toàn khỏi trình quản lý gói và phiên bản hệ thống của Python.

Nó thậm chí còn lấy các phụ thuộc cũng như cho hầu hết các phiên bản Ubuntu. Nó nên hoạt động trên tất cả các phiên bản Ubuntu hiện được hỗ trợ (10.04, 12.04, 12.10 và 13.04) và có thể trên các phiên bản khác.

Tôi bao gồm nó bên dưới và cũng đã đăng nó tại kho Github của tôi , đó là vị trí chính.

Tập lệnh nên được sao chép và lưu vào trình soạn thảo văn bản, ví dụ, build_pythonvà được thực thi ( chmod u+x build_python) và sau đó có thể được chạy với hai tham số, trong đó tham số đầu tiên phải luôn là nhánh Python và tham số thứ hai phải luôn là Phiên bản Python.

Xem python.org để biết danh sách cho phiên bản bạn muốn biên dịch.

Dưới đây là một vài ví dụ về cách sử dụng tập lệnh:

  1. Để phát hành ổn định, sau khi đã kiểm tra danh sách, nó có thể được chạy dưới dạng

    ./build_python '3.3.2' '3.3.2'
  2. Đối với bản phát hành phát triển, trong đó hai tham số khác nhau trong danh sách, nó có thể được chạy dưới dạng:

    ./build_python '3.4.0' '3.4.0a1'

Phần thân của tập lệnh được sao chép bên dưới (không có cú pháp tô sáng ở đây. Để biết điều đó, hãy xem trang Github của tôi :

#!/usr/bin/env bash

# by mik, aka Exactus29, https://github.com/Exactus29
# 
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.

# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.

##########

# a script to compile the latest stable version of Python and place in /opt

(( $# == 2 )) || { printf "Please provide a version branch (e.g. 3.4.0) and a version release (e.g. 3.4.0a1) in that order.\n"
                   printf "The official site is python.org, see the ftp server at: http://python.org/ftp/python.\n" >&2 ; exit 1; }

# a splew of variables, so that just the version number can be given on the cmd line
# and then then the script can do the rest, including verifying the packages using gpg

# need different branch and version as sometimes the two are different, particularly for dev releases
py_branch="$1"
py_version="$2"
shift 2

# check if install target already exists in /opt, and exit so user can decide what to do
if [[ -d /opt/python-${py_version} ]]; then 
    printf "Target directory for the build already exists, please rename or remove.\n" >&2
    exit 1
else 
    :
fi

# use tar.bz2 as that is what most of the older releases used, i.e. in case user tries to build an older release
py_url="http://python.org/ftp/python/${py_branch}/Python-${py_version}.tar.bz2"
py_asc="http://python.org/ftp/python/${py_branch}/Python-${py_version}.tar.bz2.asc"
py_dir="$HOME/src/python_build" # checked to exist later, etc

# first check if user requested file exists on server
wget --spider ${py_url} >/dev/null 2>&1
(( $? > 0 )) && printf "No such version, version ${py_version} does not exist\n" >&2 && exit 1


# now very important before we do anything else, to check if asc file exists, as it  doesn't for some downloads
# if we don't check and it doesn't exist it causes the script to exit

wget --spider ${py_asc} >/dev/null 2>&1
# set a flag re whether asc file exists, so can check later and avoid problems
(( $? > 0 )) && no_asc=1 || no_asc=0

# set up more variables
py_tarbz2="${py_url##*/}"
(( no_asc == 0 )) && py_tarbz2_asc="${py_asc##*/}" # only set this if there is an asc file
py_folder="${py_tarbz2%.*.*}"
py_gpg_key="" 

# check other build dependencies are installed, beyond build-dep, sqlite support, readline, ncurses, build-essential 
dependencies_check() {

    local installed=()
    local to_be_installed=()
    local dependencies_list=(build-essential wget libreadline-dev libncurses5-dev libssl1.0.0 tk8.5-dev zlib1g-dev liblzma-dev
libsqlite3-dev sqlite3 bzip2 libbz2-dev)    

    for package in "${dependencies_list[@]}"; do 
        if grep -iq '^ii' < <(dpkg -l "$package"); then
            installed+=("$package")
        else 
            to_be_installed+=("$package")
        fi
    done 2>/dev/null

    if (( ${#to_be_installed[@]} > 0 )); then
        printf "If you have recently elevated your privileges with sudo, you will not see a " 
        printf "prompt here, before the apt-get update and install of packages occurs.\n" 
        sleep 2
        sudo -p "We need to install some dependencies, please enter your password: " apt-get update && sudo apt-get -y install "${to_be_installed[@]}"
        return 0
    else 
        printf "\nNothing to install, proceeding.\n"
        return 0
    fi

}

# tailor build-dep to new python version we want to build, basically either 2x or 3x versions
# should work with at least lucid/precise/quantal/raring/saucy, the currently supported versions
if (( ${py_branch:0:1} == 3 )) && grep -iq 'precise' /etc/lsb-release 2>/dev/null; then
    sudo -p "Please provide your password to install dependencies: " apt-get build-dep python3.2 && dependencies_check
elif (( ${py_branch:0:1} == 3 )) && grep -Eiq '(raring|quantal|saucy)' /etc/lsb-release 2>/dev/null; then
    sudo -p "Please provide your password to install dependencies: " apt-get build-dep python3.3 && dependencies_check
elif [[ ${py_branch:0:3} == 2.7 ]] && grep -iq 'lucid' /etc/lsb-release 2>/dev/null; then
    sudo -p "Please provide your password to install dependencies: " apt-get build-dep python2.6 && dependencies_check
elif [[ ${py_branch:0:3} == 2.7 ]]; then
    sudo -p "Please provide your password to install dependencies: " apt-get build-dep python2.7 && dependencies_check
else
    printf "\nProceeding, but make sure you have the correct build deps installed.\n\n"
    sleep 2        
fi

# dir checks
if [[ -d $HOME/src ]]; then 
    cd $HOME/src || exit 1
else
    mkdir $HOME/src && cd $HOME/src
fi

if [[ -d ${py_dir} ]]; then
    mv "${py_dir}" "${py_dir}_old_$(date '+%F_%H_%M_%S')"
    mkdir "${py_dir##*/}" && cd "${py_dir##*/}"
else
    mkdir "${py_dir##*/}" && cd "${py_dir##*/}"
fi

# finally, download python 
printf "\nNow downloading version ${py_version} from branch ${py_branch} ....."
wget "${py_url}" -P "${py_dir}" >/dev/null 2>&1
(( $? == 0 )) && printf "Done.\n"
# only download asc if it exists, set flag earlier
(( no_asc == 0 )) && wget "${py_asc}" -P "${py_dir}" >/dev/null 2>&1

# gpg tests

gpg_test() {
    # if error returned, extract gpg key from error message
    py_gpg_key="$(gpg --verify "${py_tarbz2_asc}" "${py_tarbz2}" 2>&1 | awk '{ print $NF }' | grep -v found)"

    # now check with gpg_key (should be Python release signing key)
    printf "\nReceiving keys.. "
    gpg --recv-keys "${py_gpg_key}" >/dev/null 2>&1
    (( $? > 0)) && printf "Key could not be received\n" || printf "Done.\n"

    printf "\nVerifying download... "
    gpg --verify "${py_tarbz2_asc}" "${py_tarbz2}" >/dev/null 2>&1
    (( $? > 0 )) && printf "The download could not be verified.\n" || printf "Done.\n"

}

if (( no_asc == 0 )); then
    gpg --verify "${py_tarbz2_asc}" "${py_tarbz2}" >/dev/null 2>&1
    if (( $? > 0 )); then 
        gpg_test 
    else
        printf "\nDownload verified\n\n"
    fi
else
    printf "\nProceeding even though asc file is not available for gpg to verify download\n\n"
    sleep 1
fi

# unpack and cd to the python folder
printf "Unpacking archive...."
tar xvjf "${py_folder}.tar.bz2" >/dev/null 2>&1
(( $? == 0 )) && printf "Done.\n" || { printf "Problems occured when unpacking, exiting\n" >&2; exit 1; }
cd "${py_folder}" || exit 1

# tailor the build to your machine here with configure and make

printf "\nNow for the configure (default prefix is /opt/python-${py_version})...."
sleep 2
./configure --prefix=/opt/python-${py_version} >/dev/null 2>&1
# as configure and make will exit anyway on error, no need to add || alternatives to the tests below
(( $? == 0 )) && printf "Done.\n\n"  
sleep 1

printf "\nNow for the compile. (If necessary, please add your own specifications to the make command line and run the script again)\n"
printf "\nPlease wait for the compile to finish: it may take a while...."
make >/dev/null 2>&1
(( $? == 0 )) && printf "Done.\n\n"

printf "\nWe are installing with make install into /opt, instead of using checkinstall.\n"
sudo make install >/dev/null 2>&1
installcode=$?
(( $installcode == 0 )) && printf "\n${py_version} succesfully installed in /opt/python-${py_version}\n\n"

if [[ -d $HOME/bin ]]; then
    ln -s /opt/python-${py_version}/bin/python${py_version:0:3} ~/bin/py-${py_version}
    (( $? == 0 )) && printf "\nSymlink created, run py-${py_version} in the terminal to launch the interpreter\n"
else
    mkdir $HOME/bin && ln -s /opt/python-${py_version}/bin/python${py_version:0:3} ~/bin/py-${py_version}
    (( $? == 0 )) && printf "\nSymlink created, run py-${py_version} in the terminal to launch the interpreter\n"
    printf "\nHowever, you will not be able to call py-${py_version} until you have logged out and in again, as bin will not"
    printf " have been added to your path just as $HOME/bin is created.\nn"
fi

# important info re setting up pyvenv re distribute tools and pip etc
cat <<extra_info

            See also a program called pyvenv with your installation in /opt, 
            with which you can create a virtual environment and use tools
            such as pip, etc. See the official documentation at:
            http://docs.python.org/3.3/using/scripts.html#pyvenv-creating-virtual-environments

extra_info

sleep 2 
exit ${installcode}

1

Cảnh báo : Pythonbrew đã không được ủng hộ cho pyenv. Hướng dẫn cập nhật tại đây

Ngoài ra, bạn có thể sử dụng một cái gì đó như pythonbrew :

curl -kL http://xrl.us/pythonbrewinstall | bash    
echo "[[ -s $HOME/.pythonbrew/etc/bashrc ]] && source $HOME/.pythonbrew/etc/bashrc" >> ~/.bashrc    
pythonbrew install 3.3

Nó khá dễ sử dụng và một lợi ích khác là có thể cài đặt bất kỳ phiên bản python nào bạn cần. Vui lòng xem tài liệu của họ để biết chi tiết chế độ


0

Dưới đây là các bước mà tôi đã làm theo:

wget http://python.org/ftp/python/3.3.2/Python-3.3.2.tar.bz2
tar -xvjf ./Python-3.3.2.tar.bz2
cd ./Python-3.3.2
./configure --prefix=/opt/python3.3
make && make install
mkdir ~/bin
ln -s /opt/python3.3/bin/python ~/bin/py
echo 'alias py="/opt/python3.3/bin/python3"' >> .bashrc
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.