はじめに
前回のPyhonで簡易Webサーバーを使用する時の注意点に引き続き、CGIプログラミング中につまずいた点を情報として残したいと思います。
環境
- Kubuntu 22.04
- Python 3.10.12
状況
以下の状況で躓きました。
・普段はWindowsでPythonプログラミングしている。
・途中でLinux環境に変更した場合。または本番環境がLinuxの場合。
事象
・Windows環境では実行できていたのに、急にプログラムが実行できなくなった。またはエラー。
・ソースコードは変わらないのにも関わらず、環境によって実行できるケースと、できない。またはエラーが発生するケースがある。
対策 WindowsからLinuxに移すときに注意する点
WindowsからLinuxに移すときに注意する点がいくつかありましたのでご紹介します。
下記の中の特に「改行コードを「CRLF」から「LF」に変更する」と 「Linux環境で、対象ファイルの権限状態を確認する」は特に注意が必要です。
この2つは設定を間違えると実行できなくなり、また特に間違えやすい点になります。
私の場合の今回のエラーの原因は、「改行コードを「CRLF」から「LF」に変更する」でしたが、紹介する注意点は以前にひっかかったことがあるものになります。
改行コードを「CRLF」から「LF」に変更する
Windowsでは改行コードは「CRLF」でLinuxでは改行コードは「LF」が通常かと思います。
この改行コードの違いでプログラム実行できないという事があります。
ですので、Linux環境に移した場合改行コードを確認し、「LF」に変更、保存をして対応しましょう。
上記のような問題があるので、Web開発はMACが好まれるのかもしれないと思いました。
次のパスの問題もそうですが、改行コードやらパスやら、仕様の互換性がある状態。または、統一してほしいなと思います。難しいと思いますが。。
Linux環境で、対象ファイルの権限状態を確認する
Linux環境では移動したファイルの権限状態(ファイルパーミッション)を確認しましょう。
ファイルをWindows環境からLinux環境に移したときにファイルの権限が「実行不可」状態になっている可能性があります。その場合はファイルを実行できないため、Windowsではプログラムを実行できていたのに、Linux環境に移した途端、ファイルが実行できない。という事象に襲われることがあります。
その場合は対象のファイルの権限(パーミッション)を「実行可能(許可)」に変更しましょう。
普段Windowsを使用しているとファイルの権限はあまり意識しないとおもいますので、注意したいところですね(私も普段Windowsを使用していますが、ファイル権限は意識していないので見過ごしがちになります。。)
ソースコードのファイルパスを見直す
ソースコードでファイルパスを指定する際、Windowsだとパスの区切りを「\(またはバックスペース)」で表現するのに対し、Linuxは「/」で表現します。
記憶だとPyhtonは上記の記号の違いは吸収して実行できた気もしますが、確認したほうが良いと思います。
また、OS環境を移した際に、ディレクトリ構成を間違えていたり、異なるディレクトリ構成の時もあるので、確認したほうが良いです。
シバンのPythonのVersionが対象環境のPythonバージョンになっているかを確認する。
Pythonファイルの一番先頭に下記のようなコードが書かれていることはありませんか?
#!/usr/bin/python3
PythonこれはShebang(シバンまたはシェバン)と呼ばれUnix,Linux系システムにおいて、ファイルに書かれたプログラム文をどうやって実行するかを指定するものです。
このシバンのPyhtonバージョンがLinux環境に移した際に、対象環境のPythonバージョンとあっているかどうかを確認しましょう。
例えば、今までシバンが「Pyhon3.10」だったのに、次のLinux環境では「Python3.6」だったりすると、実行できない可能性があります。
Windowsではシバンは基本的に気にしなくても良いため、シバンが書かれてて、Linux環境に移したときに、意識していなかったシバンのPythonバージョンが影響してしまうということも考えられるので気をつけたいですね。
おわりに
Windows環境からLinux環境へ開発環境を移す時の注意点をまとめました。
私がCGIプログラミングを行っているときに躓いた点をまとめましたが、今回ご紹介した注意点はCGIプログラミングに限るお話ではないと思いますので、参考になれば幸いです。