python3.7でvenvでの開発環境を作る
python3.7の開発環境をvenvで作る
概要
pythonの仮想環境を作るやり方は沢山あるが、公式チュートリアルにあるやり方をベースにした。
python3.7をインストールして、venvで実行できるようにする。
- python3.7
- venv
- macOS 10.14
- homebrew
python3.7インストール
brew update brew install python3 python3 -v (3.7.3がインストールされていることが確認できる。ctrl+Dで抜ける)
venv環境のフォルダを作る
test-envという名前のvenv環境を作る
mkdir test-env cd test-env python3 -m venv test-env
ターミナルでvenv環境に入る
上記までの作業をやると、test-envフォルダに色々とファイルが作られるので、以下のコマンドを実行する
source test-env/bin/activate
すると、ターミナルが、
(test-env) $
上記みたいになるので、この状態でpipインストールや、python3コマンドでスクリプトなどを実行すると、test-envのみで有効になる。
その場合、test-envフォルダ内でやらなくてはいけないということはなく、別途フォルダを作ってそこで実行したりしても良い。
Go 1.12 のローカル環境構築、Modulesを使えるようになるまで(MacOS版)
概要
- mac OS 10.14
- Homebrewインストール済み
Homebrewでgoをインストール
brew update brew install go go version (go version go1.12.4 darwin/amd64)
goenvもいれる
brew install goenv vi ~/.bash_profile
bash_profileに以下を追加
export PATH="$HOME/.goenv/bin:$PATH" eval "$(goenv init -)"
詳しい使い方はここを参考にしました。
バージョンをbrewで入れたものに戻したい場合は、
goenv global system
と入れる。
GOPATH設定
bash_profileに以下を追加
export GOPATH=$HOME/go
この場合は、ホームフォルダ直下にgoというフォルダを作って、その下がGOPATHになる。
必要に応じて好きな場所に変えても問題ないです。
modulesを使う
go1.12だとデフォルトでmodulesが使えるようになっている。
適当な場所でフォルダを作り、その中で、
go init
すると、go.modフォルダが作られる。 あとはimport文に適当なライブラリを書いて、
go build
すると自動で持ってきてくれる。go getしてもOK。
具体例
たとえば、
上記のライブラリを使いたいとき、以下のようなソースコードをmain.goに書くとする。
package main import ( "fmt" "github.com/julienschmidt/httprouter" // これが使いたいgo getも特にしていないライブラリ "net/http" "log" ) func Index(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { fmt.Fprint(w, "Welcome!\n") } func Hello(w http.ResponseWriter, r *http.Request, ps httprouter.Params) { fmt.Fprintf(w, "hello, %s!\n", ps.ByName("name")) } func main() { router := httprouter.New() router.GET("/", Index) router.GET("/hello/:name", Hello) log.Fatal(http.ListenAndServe(":8080", router)) }
そして、以下を実行すると自動で上記ライブラリを持ってきてくれる。
go build main.go
※go.modファイルには上記ライブラリが追加されている。
Goにおけるフォルダ(パッケージ)分け
Go言語の勉強を始めたので、基本のメモ。
環境
Go 1.12
フォルダ分け
Goはmain関数があるmainパッケージが処理の拠点として存在するが、 処理を切り分けたい場合はパッケージを作る。 以下の内容が書かれた、「main.go」というファイルがあるとする
package main import ( "fmt" ) func main() { fmt.Println("hello world") }
これをあえて以下のように切り分けたい場合
/prj ┣ main.go ┗ /print/print.go
print.goは以下のようにする
package print import ( "fmt" ) func PrintHello(){ fmt.Println("hello world") }
main.goは以下のように書き換える
package main import ( "print" ) func main() { print.PrintHello() }
こちらのmain.goを実行すると最初に書いたmain.goと同じ動きをする。
fmtはprint側で呼び出して使っているため、importの必要がなくなる。
また、printとpackageに指定したprint.goを呼び出すときは、
importを使って呼び出す。
そうすると、「PrintHello」のように最初が大文字で設定してある関数はパブリックなため、
「パッケージ名.関数名」で呼び出すことができる。
その他
import( . "print" )
上記のように「.」をimportするパッケージ前につけると、print.PrintHello()みたいにパッケージ名を前につけないで呼び出すこともできる。 「.」の代わりに「pri」とかつけてパッケージ名を指定のものに変えることもできる。
ネストしてるパッケージ
/prj ┣ main.go ┗ /print/printutil/print.go
上記のような階層にした場合は、
import ( "print/printutil" ) main(){ printutil.PrintHello() }
上記のように呼び出す、print.goのパッケージ名はこの場合は「printutil」とする。
CentOS7とapache2.4で/tmp直下にファイル等を保存したりしたい時
privateTmp機能をoffにする
※セキュリティが下がるのでなるべく注意
/lib/systemd/system/httpd.service --- PrivateTmp=true ↓ PrivateTmp=false --- systemctl daemon-reload systemctl restart httpd
apache2.4でのpreforkのチューニング
apache2.2ではhttpd.confに設定する部分があったが、 2.4では場所が変わっていたためメモ。
sudo vi /etc/httpd/conf.modules.d/00-mpm.conf ------------------------------------------------------------------------------------------- # Select the MPM module which should be used by uncommenting exactly # one of the following LoadModule lines: # prefork MPM: Implements a non-threaded, pre-forking web server # See: http://httpd.apache.org/docs/2.4/mod/prefork.html LoadModule mpm_prefork_module modules/mod_mpm_prefork.so # worker MPM: Multi-Processing Module implementing a hybrid # multi-threaded multi-process web server # See: http://httpd.apache.org/docs/2.4/mod/worker.html # #LoadModule mpm_worker_module modules/mod_mpm_worker.so # event MPM: A variant of the worker MPM with the goal of consuming # threads only for connections with active processing # See: http://httpd.apache.org/docs/2.4/mod/event.html # #LoadModule mpm_event_module modules/mod_mpm_event.so #以下を追記 <IfModule mpm_prefork_module> StartServers 10 MinSpareServers 10 MaxSpareServers 10 ServerLimit 10 MaxClients 10 MaxRequestsPerChild 50 </IfModule> ----------------------------------------------------------------------------------
MongoDBでレプリカセットを今のデータを保持したまま解除する方法
MongoDBのレプリカセットを解除しようとしたとき、
データを保持したまま解除する方法が分からなくはまった時のメモ。
localデータベースを削除
ホスト機で以下コマンドを実行
mongo >use local >db.dropDatabase()
confファイル変更 mongodb ver.2系の場合
vi /etc/mongod.conf ---------- # in replicated mongo databases, specify the replica set name here replSet=replSetname ---------- ↓ ---------- # in replicated mongo databases, specify the replica set name here #replSet=replSetname ----------
confファイル変更 mongodb ver.3系の場合
vi /etc/mongod.conf ---------- replication: oplogSizeMB: 1024 replSetName: 'replSetName' ---------- ↓ ---------- #replication: # oplogSizeMB: 1024 # replSetName: 'replSetName' ----------
mongoを再起動
service mongod restart