Installing MacPorts from China by the .pkg
file, you may stuck on “Running Package Scripts”. If it happens, it’s because of that your network is hard to connect the server of MacPorts to update. Nevermind, MacPorts is already installed, just not updated.1 Forcely kill the installer using the kill
command.
Edit the following files to change sources MacPorts use to mirrors in China.
$prefix/etc/macports/source.conf
This is the source of the package tree.
Comment out and append:
# rsync://rsync.macports.org/macports/release/tarballs/ports.tar [default]
rsync://mirrors.tuna.tsinghua.edu.cn/macports/release/tarballs/ports.tar [default]
$prefix/etc/macports/archive_sites.conf
This is the source of package binary archives.
Append:
name macports_archives
urls https://mirrors.tuna.tsinghua.edu.cn/macports/packages/
type tbz2
$prefix/etc/macports/macports.conf
The source MacPorts uses to update itself can be set in the file.
Comment out and append:
# rsync_server rsync.macports.org
rsync_server mirrors.tuna.tsinghua.edu.cn
You can run sudo port selfupdate
to update and finish the installation now.
Install Vim by sudo port install vim +huge
. The +huge
variant provides many important features
like supporting the system clipboard.
After you have installed Python and pip
with MacPorts. You may want to install Python packages that have executable files, Eg. virtualenv
.
You can successfully install it. But when you type virtualenv
from the shell, it can’t be found, because it’s not placed into $PATH
.
That’s because MacPorts provides some Python packages by itself. For example, you can install virtualenv
for Python 3.6 by running sudo port install py36-virtualenv
. If MacPorts links executables from pip
, it may conflict with executables from MacPorts.
Personally, I don’t think it’s a good decision.
Firstly, I think Python packages should be provided only by pip
, not by a system package manager like MacPorts.
Secondly, if it really wants to do this, it should also do this on Ruby packages, Node.js packages, etc. But it doesn’t. If you install Ruby packages by gem
, executables will be linked.
My solution is simple. Supposing MacPorts is installed in the default location /opt/local
and we use Python 3.6, we link /opt/local/Library/Frameworks/Python.framework/Versions/3.6/bin/
to /usr/local/py3-bin
and put it into my $PATH
. If I want to switch the version of Python, I could just relink it.
After you install Ruby with MacPorts. You try to install Ruby packages with gem
. For example, you run sudo gem install jekyll
. But the building may fail for it can’t find some basic header files like stdio.h
.
You should carefully check the output, it looks like the following:
sysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk doesn't exist
Run
cd /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/
and check files. If MacOSX10.14.sdk
or what the file you miss in your system really does not exist, you could make a symlink to MacOSX.sdk
by yourself.
# under /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/
$ ln -s MacOSX.sdk MacOSX10.14.sdk