PEP 3147をまだ読んでいない場合は、おそらくそれで質問に答えることができます。
そのPEPで説明され、Python3.2の時点で実装されているソリューションを意味するものではありません。「複数のPythonバージョン」が単に「3.2、3.3、そしておそらく将来の3.x」を意味する場合、これは素晴らしいことです。または、「2.6+と3.1+ですが、私は3.2と3.3しか気にしないので、他のもののpycスピードアップが得られなくても大丈夫です」という意味でも。
しかし、サポートされているバージョンを尋ねたところ、「2.7」と言われました。これは、問題の解決にPEP3147を使用できないことを意味します。
幸いなことに、PEPは、問題を解決するための以前の試みとそれぞれの落とし穴についての議論でいっぱいであり、オプションが何であるか、そしてそれらをどのように実装するかを理解するのに十分以上のものがあるはずです。
1つの問題は、PEPが非常にLinux中心であるということです。これは主に、過去に問題を解決しようとしたのは主にLinuxディストリビューションであるためです。(Appleもそうしましたが、彼らの解決策は(a)ほぼ機能し、(b)Mac固有の「フレームワーク」全体と緊密に結合されていたため、ほとんど無視されていました…)
そのため、「.pycファイルをWindowsのどこに置くべきか」という疑問が残ります。
最良の選択は、おそらくユーザーのローカルアプリケーションデータディレクトリの下にあるアプリ固有のディレクトリです。Vista以降が必要な場合は既知のフォルダを、必要がない場合はCSIDLを参照してください。いずれにせよ、FOLDERID_LocalAppDataまたはCSIDL_LOCAL_APPDATAを探しています。これは次のとおりです。
ローカル(非ローミング)アプリケーションのデータリポジトリとして機能するファイルシステムディレクトリ。一般的なパスはC:\Documents and Settings\username\Local Settings\Application Data
です。
重要なのは、アプリケーションがユーザーごとに(およびそのユーザーのプロファイルディレクトリ内に)データを保存する場所であり、ユーザーの移動プロファイルが最終的に使用される可能性のあるマシンごとにデータを保存する場所です。つまり、安全にデータをそこに置いて知ることができます。ユーザーにはUACが関与せずにそこに書き込む権限があり、他のユーザーやマシンがそこにあるものに干渉しないことも(そしてあなたができる限り)知っていること。
My Unique App Name
そのディレクトリ内に、プログラムのディレクトリを作成し、そこに必要なものを配置します。一意の名前(UUIDなど)を選択している限り、My Company Name\My App Name
他のプログラムとの偶発的な衝突から安全です。(MSDNにはこれに関する特定のガイドラインがありましたが、現在は見つかりません。)
では、どのようにしてそのディレクトリにアクセスしますか?
最も簡単な方法は、env変数を使用することです%LOCALAPPDATA%
。古いWindowsを処理する必要がある場合は、最後に使用%USERPROFILE%
してタック\Local Settings\Application Data
することができます。これは、同じであるか、ジャンクションを介して同じ場所に配置されることが保証されています。
pywin32
ネイティブのWindowsAPIを使用またはアクセスすることもできctypes
ます(これには少なくとも3つの異なるAPIがあり、これらのAPIにアクセスする方法は少なくとも2つあるため、これを作成するためのすべての可能な方法を提供したくはありません...しかし簡単なグーグルまたは、「pywin32SHGetFolderPath」または「ctypesSHGetKnownFolderPath」など、必要なものを検索します。
または、これを処理するための複数のサードパーティモジュールがあります。GoogleとPyPIの両方が最初に登場したのはでしたwinshell
。