現在、下記の本でPythonを使った開発について学んでいます。
- 作者: 株式会社ビープラウド
- 出版社/メーカー: 秀和システム
- 発売日: 2018/06/12
- メディア: 単行本
- この商品を含むブログを見る
この書籍では、Windows10にVirtualBoxとVagrantをインストールし、ゲストOSとしてUbuntuを利用しホストOSのWindows10とディレクトリを同期することで、Windows10上のエディタでコーディングしながらPythonはLinux上で動かすという形で開発を進めていきます。
が、環境を作り、さあ開発を始めていこうというところでいきなり躓いたのでその内容について書いていきます。
目次
環境
書籍に従い、Windows10にVirtualBoxとVagrantをインストール、UbuntuのBoxを使います。
バージョンは以下の通り。
>vagrant -v Vagrant 2.2.3 >vagrant box list ubuntu/xenial64 (virtualbox, 20190115.0.0)
ゲストOSとディレクトリ同期設定
Vagrantfileを編集し、ホストOSとゲストOSのディレクトリ同期設定をします。
# Vagrantfile (中略) # Share an additional folder to the guest VM. The first argument is # the path on the host to the actual folder. The second argument is # the path on the guest to mount the folder. And the optional third # argument is a set of non-required options. config.vm.synced_folder "./src", "/vagrant_data" (中略)
これで、ホストOSの[Vagrantfileのあるフォルダ]/src
とゲストOSの/vagrant_data
が同期されます。
sshでゲストOSに接続後、このディレクトリ上でvenvコマンドを実行しPythonの仮想環境を作りたいのですが、実行時にエラーが発生しました。
vagrant@ubuntu-xenial:/vagrant_data$ python3.6 -m venv Error: [Errno 71] Protocol error: 'lib' -> '/vagrant_data/venv/lib64'
シンボリックリンクを貼る際にエラーが出ているみたい
”vagrant venv protocol error”あたりで検索しても上位の方はそれらしい情報が出てこず、しばらく寝かせていた(笑)のですが、"windows10"をキーワードに入れると「シンボリックリンク」がキーワードとして挙がってきました。
Windowsにシンボリックリンクの機能があること自体知らなかったのですが、どうやらシンボリックリンク作成の権限は管理者ユーザーのみとなっているよう。
venvコマンドを実行するとシンボリックリンクを貼りに行き、Linux上ではできるけど同期を取っているWindows上でその権限がないのでエラーとなっている、というところなのかな。
qiita.com
簡単に解決…
で、どうすれば解決するかというと、Vagrantの起動を管理者ユーザーで実行すればよいとのこと。
一般ユーザーで起動した状態から管理者ユーザーでreloadしてもダメでした。一度落としたうえで起動しなおす必要があるようです。
(管理者ユーザーでコマンドプロンプト起動) >vagrant halt >vagrant up >vagrant ssh (以下ゲストOS上) vagrant@ubuntu-xenial:~$ cd /vagrant_data vagrant@ubuntu-xenial:/vagrant_data$ python3.6 -m venv venv vagrant@ubuntu-xenial:/vagrant_data$ source venv/bin/activate (venv) vagrant@ubuntu-xenial:/vagrant_data$
Windows Proであればローカルセキュリティポリシーを編集することで一般ユーザーにシンボリックリンク作成の権限を与えることもできますが、Homeではできないのでひとまずこの方法が楽かなと思います。