2 JavaScript의 프로토타입(prototype)

|

JavaScript의 프로토타입(prototype)

프로토 타입 객체란?

  • 함수를 정의하면 다른 곳에 생성되며, 프로토 타입 객체는 다른 객체의 원형이 되는 객체이다.

  • 모든 객체는 프로토타입 객체에 접근할 수 있으며 프로토타입 객체도 동적으로 런타임동안 멤버를 추가할 수 있다.

  • 자바스크립트에서는 만들어진 객체 안에 __proto__(비표준) 속성이 자신을 만들어낸 원형을 의미하는 프로토타입 객체를 참조하는 숨겨진 링크가 있다.

views
프로토 타입 역할 2가지
1. Prototype Object : 함수의 멤버인 prototype 속성은 -> prototype객체를 지정하는 역할

2. Protoype Link : 객체안의 __proto__(비표준) 속성은 자신을 만들어낸 원형인 프로토 타입 객체를 참조하는 숨겨진 링크로써 프로토타입
prototype 속성은 함수만 가지고 있지만(ex. MyObject.prototype),
__proto__ 속성은 모든 객체가 빠짐없이 가지고 있다.(조상 함수의 prototype Object를 가리킨다.)


views

javascript에서 함수를 정의하면 함수 멤버로 prototype 속성이 있다.

이 속성은 함수이름의 prototype 객체를 참조하고, prototype 객체의 멤버인 constructor 속성은 함수 내부를 참조하는 내부 구조를 가진다.


1) prototype 기반 상속

views

MyObject를 통해 생성되는 모든 객체는 MyObject함수의 prototype 속성이 참조하는 프로토 타입 객체를 참조한다.

// MyObject 함수 생성
var MyObject = function(name, age){
    console.log('생성자 함수');
    this.name = name;
    this.age = age;
}

// MyObject의 prototype 속성 추가
MyObject.prototype.school = 'bit';
MyObject.prototype.course = 'cafe24';
// 이렇게 하면 MyObject의 prototype의 constructor에 들어감

// MyObject로 객체 생성
var o6 = new MyObject('길동', 50);
console.log(o6);
console.log(o6.school) // 객체에서 속성을 찾고 속성이 없으면, 이 객체의 생성자의 객체를 찾음, 없으면 undefine
console.log(o6.course)

// 해당 객체의 속성에 넣음
o6.school = 'multicampus'
console.log(o6.school)
views


// 생성자의 prototype 속성 추가
MyObject.prototype.info = function(){
    console.log(
        this.name + ", " +
        this.age + ", " +
        this.school + ", " +
        this.course
    );
}

// 객체의 info
o6.info();

o6.school = 'multicampus'
o6.info();

// 오버라이딩 개념과 비슷
o6.info = function(){
    console.log('비밀!');
}

o6.info();

길동, 50, bit, cafe24

길동, 50, multicampus, cafe24

비밀!


2) 실습

다음 속성과 함수(메서드)를  가지고 있는 Class 개념을  function과 프로토타입을 사용하여 구현해 보세요.
1) 생성자  함수 Rectangle (클래스 Rectangle)
2) LeftTop 좌표 x1, y1
3) RightBottom 좌표 x2, y2
4) backgroundColor  ( #fff )
5) show 함수 : 화면에 사각형을 표시

rect.js

// Rect 생성자 함수
var Rect = function(x1, y1, x2, y2, bg){
    this.x1 = x1;
    this.y1 = y1;
    this.x2 = x2;
    this.y2 = y2;
    this.bg = bg;
}

Rect.prototype.show = function(){
    document.write(
        "<div style='position:absolute; " +
        "left:" + this.x1 +"px; " +
        "top:" + this.y1 + "px; " +
        "width:" + (this.x2-this.x1) + "px; " +
        "height:"+ (this.y2-this.y1) + "px; " +
        "background-color:" + this.bg + "; '>" +
        "</div>"
    );
}

ex4.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src='rect.js' type="text/javascript"></script>
<script>

    window.onload = function () {
        var rects = [
            new Rect(100, 100, 200, 300, "RGB(0,0,255)"),
            new Rect(250, 250, 400, 400, "#f00")
        ]
        var index = 0;
        var intervalId = setInterval(function(){
            if(index >= rects.length){
                clearInterval(intervalId);
                return;
            }
            rects[index++].show();
            
        }, 1000);
    }

</script>
</head>
<body>
</body>
</html>

1 JavaScript 기본 사용법, 객체 기본

|

views

[1] 자바스크립트 사용법

1) 본문 혹은 head안에서 작성

<head>
<script type="text/javascript">
   자바스크립트 소스코드
</script>
</head>
<body>
... 
</body>

2) 외부 파일 불러서 실행 ( 보통 이렇게 자바스크립트를 관리한다.)

<head>
<script type="text/javascript" src="hello.js"></script>
</head>
<body>
... 
</body>


자바스크립트 Object 이해하기 참고

[2] Javascript 기본 데이터 타입

✔ [특징]

  • Javascript의 class free : class가 없어도 객체 생성이 가능하다.

  • 객체가 객체를 포함하기 쉬운 구조이다. (그래프, 트리, 맵 등을 쉽게 표현할 수 있다.)

  • 객체 하나에 있는 속성들을 다른 객체에 상속해 주는 프로토 타입 연결 특성이 있다.

    초기화 시간 단축, 메모리 절약가능

    ex) 테이블 데이터가 무수히 많아지면 원페이지 처리를 어떻게 할 것인가

  • Object Literal -> JSON

✔ [1] Primitive Data Type (기본 자료형)

  • Number
  • Boolean
  • String
  • null
  • undefined

✔ [2] 객체

  • Array
  • Date
  • Math
  • RegExp
  • Function
  • Object

✔ [3] 유사 객체 - 기본타입도 객체와 유사한 성질을 갖고있는 것

  • Number
  • String
  • Boolean
var number = 5;
console.log(number + ' : ' + typeof(number));

5 : number


함수는 생성자처럼 쓰는 ‘그냥’ 함수 객체이다. 함수에 new를 다 붙일 수 있다.

var number2 = new Number(5); 
console.log(number2 + ' : ' + typeof(number2));

console.log(number + number2); 

5 : object

10


자바스크립트 타입 확인해보기

var n = 10;
var f = 3.14;
var b = true;
var s = 'hello world';
var fn = function(){};
var o = {};
var a = [];

console.log(n + ' : ' + typeof(n));
console.log(f + ' : ' + typeof(f));
console.log(b + ' : ' + typeof(b));
console.log(s + ' : ' + typeof(s));
console.log(fn + ' : ' + typeof(fn));
console.log(o + ' : ' + typeof(o));
console.log(a + ' : ' + typeof(a));

10 : number

3.14 : number

true : boolean

hello world : string

function(){} : function

[object Object] : object

object


- new 생성자 함수()를 사용해서 객체를 생성

// new 생성자 함수()를 사용해서 객체를 생성할 때, 
var n2 = new Number(5);
var f2 = new Number(3.14);
var b2 = new Number(false);
var s2 = new String('hello world');
var fn2 = new Function('a', 'b', 'return a + b;'); 
					// 파라미터 a, b, 함수 본문
var o2 = new Object();
var a2 = new Array();

new를 사용해도 ‘그냥’ 함수객체임! 객체를 만드는 거임!

5 : object

3.14 : object

0 : object

hello world : object

function anonymous(a,b

) {

return a + b;

} : function

[object Object] : object

object


- 자바스크립트의 객체 분류

자바스크립트 객체는 3개로 분류할 수 있다.

  1. Native opject (Built-in object, core object)

    • 애플리케이션의 환경과 관계없이 언제나 사용할 수 있는 애플리케이션 전역의 공통 기능을 제공한다.
    • Object, String, Number, Function, Array, RegExp, Date, Math와 같은 객체 생성에 관계가 있는 함수 객체와 메소드로 구성된다.
  2. 호스트 객체

    • 브라우저 환경에서 객체를 말한다.
    • window, XmlHttpRequest, HTMLElement 등의 DOM 노드 객체와 같이 호스트 환경에 정의된 객체
  3. 사용자 정의 객체



- 내장객체, object 객체, 브라우저 내장객체

자바스크립트의 내장 타입의 객체는 확장이 불가능하다.

하지만, new로 함수를 이용햐서 object타입의 객체를 생성하면 가능하다. (object 타입의 객체는 확장이 가능)

# 불가능
j = 10
j.abs = -10
# 가능
i = new Number(10)l
i.abs = -10
// 내장 타입의 객체는 확장이 불가능
var n = 10;
n.myVal = 20;
console.log(n.myVal);

// object 타입의 객체는 확장이 가능
var n2 = new Number(5);
n2.myVal = 20;
console.log(n2.myVal);

undefined

20


브라우저 내장객체 console만 알아보고 나머지는 더 공부 후에 알아보기로

// 브라우저 내장 객체
console.log('로그입니다.');
console.warn('경고입니다.');
console.error('에러입니다.');
console.info('정보입니다.'); 
views

- null VS undefined 차이 알아보기

null과 undefined 모두 자바스크립트에서 값이 없음을 의미한다.

**undefined ? **

undefined는 데이터 타입이자, 값을 나타낸다.

기본적으로 값이 할당되지 않으면 undefined 타입이며, 변수 값 또한 undefined이다. 정의되지 않은 것, 존재하지 않는 값이라고 볼 수 있다.

null ?

null은 데이터 타입이자, 값을 나타낸다.

null타입의 변수는 명시적으로 값이 비어있음을 나타낼 때 사용한다.

아무것도 참조하고 있지 않음을 나타내며 주로 객체를 담을 변수를 초기화 할 때 사용한다.

null VS undefined 차이점

undefined는 변수를 선언만 하더라도 값이 할당되지만,

null은 변수를 선언한 후에 null로 값을 바꿔주어야 한다.


실습

var myVar1;
var myVar2 = null;

console.log(myVar1 + " : " + myVar2);
console.log(typeof(myVar1) + " : " + typeof(myVar2));
console.log(myVar1 == myVar2); // 값 비교
console.log(myVar1 === myVar2); // type까지 비교

undefined : null

undefined : object

true

false


- 등치성, 동일성 비교 & 형변환해보기

//== (!, equality, 값의 등치성, 형변환o)
console.log("2" == 2); // true
console.log(true == 1); // true
console.log('abc' == new String('abc')); // true

//형변환
console.log(2 + "2"); // 22
console.log("2" + 2); // 22

console.log(true + 10); // 11
console.log('abc' + new String('abc')); // abcabc

console.log('========================================')
//== (!, identity, 객체의 동일성, 형변환x)
console.log("2" === 2); // fasle
console.log(true === 1); // fasle
console.log('abc' === new String('abc')); // fasle


//추천:
//== 연산자를 사용할 때는 엄격하게 형변환을 해서
//두 피연산자의 타입을 맞춘다.
str = "5";
console.log(parseInt(str) == 5); // true

- 변수범위 알아보기

  • 변수에는 무조건 var를 붙인다.

    1. var 사용 여부에 영향을 받는다.
    2. 특히 local(함수 내부)에서 var를 사용해서 변수를 정의하면 local 범위를 가진다.
// 변수 범위(Scope)
var i = 5; 
var f = function(){
	var i = 20;
	console.log(i);
	i = i - 1; 
} 
f();
console.log(i);

20

5


- statement

  • js engine이 읽어들여서 실행하는 단위

js는 \n or ;(세미콜론)을 기준으로 단위를 읽어 실행한다.

// statement
// js engine이 읽어들여서 실행하는 단위
// js는 `\n` or `;(세미콜론)`을 기준으로 단위를 읽어 실행한다.
var s = 'hello world'; console.log(s);

// 전역(global) 객체 window
// console.log(s);
console.log(window.s);

hello world

hello world


- 전역객체(window) 확인

var o = {};
o.name = '둘리';
o.age = new Number(10);
o.age.man = 9; // 만 나이

console.log(window.o);
console.log(window.o.name);
console.log(window.o.age);
views
// json으로 작성
var o2 = {
	'name' : '둘리',
	'age' : {
		'value' : new Number(11),
		'man' : 11
	}
}
console.log(window.o2);
console.log(window.o2.name);
console.log(window.o2.age);
views

[3] 객체 정의, 생성

// 객체(type object)를 생성하는 방법 1
// new 키워드를 사용하는 방법
var o1 = new Object();
o1.name = '둘리';
o1.age = 10;
console.log(o1);

//객체(type object)를 생성하는 방법 2
// literal
var o2 = {};
o2.name = '마이콜';
o2.age = 20;
console.log(o2);

// 객체(type object)를 생성하는 방법 3
// (J)ava(S)cript (O)bject (N)otation
var o3 = {
    name : '또치',
    age : 30
}
console.log(o3);
views

함수 사용

// 객체(type object)를 생성하는 방법 4
// 커스텀 생성 함수를 사용하는 방법

// 보통 일반 함수 관례 소문자 시작
var f = function(){
    console.log('보통 일반 함수');
}

// 생성자 함수 관례 : 대문자 시작
var MyObject = function(name, age){ // 객체 지향을 흉내
    console.log('생성자 함수');
    this.name = name;
    this.age = age;
}

f();
// MyObject(); // 이렇게 호출 용도가 아님 

var o4 = new f();
var o5 = new MyObject('도우넛', 40);
console.log(o4);
console.log(o5);
views

9 리눅스에서 mod_wsgi로 apache와 django 연동(PYTHONPATH 설정)

|

[1] mod_wsgi 설치하기

다운로드 링크

views

다운 : # wget https://github.com/GrahamDumpleton/mod_wsgi/archive/4.6.4.tar.gz

이름변경 : # mv 4.6.4.tar.gz mod_wsgi_4.6.4.tar.gz

압축 해제: # tar xvfz mod_wsgi_4.6.4.tar.gz

dir 들어가기 : # cd mod_wsgi-4.6.4/

빌드환경 설정 : # ./configure --with-apxs=/usr/local/cafe24/apache/bin/apxs --with-python=/usr/local/cafe24/python3.7/bin/python3

--with-apxs : 모듈 만드는 아파치 도구
--with-python : 파이썬 라이브러리 위치 알려주기

# make

# make install


[2] 환경 설정

1) httpd.conf 설정

모듈 로딩 위치 : apache설치 경로의 conf/

[root@localhost apache]# vi conf/httpd.conf

/LoadMod 검색해서 LoadModule맨 아래에 LoadModule wsgi_module modules/mod_wsgi.so 추가

views


2) extra/httpd-vhosts.conf

8888 포트의 VirtualHost 설정하기

[root@localhost apache]# vi conf/extra/httpd-vhosts.conf

views


3) git에서 배포할 project clone해오기

apache에 배포할 프로젝트를 git에서 clone해 올 것이다.

먼저 해당 프로젝트에서 pip3 freeze > requirements.txt 만들어서 git에 올리기


프로젝트 다운 받을 경로 : /home/django

프로젝트 끌어오기 : # git clone https://github.com/jungeunlee95/django-basic.git

설정 이름으로 변경: # mv django-basic/ python_ch3

# cd python_ch3

가상환경 만들기 : # virtualenv venv

가상환경 실행 : # source venv/bin/activate

라이브러리 설치 : (venv) [root@localhost python_ch3]# pip3 install -r requirements.txt


port 9999 열기

# vi /etc/sysconfig/iptables

-A INPUT -m state --state NEW -m tcp -p tcp --dport 9999 -j ACCEPT 추가

# /etc/init.d/iptables restart : 재시작

해당프로젝트의 ip허용

settings.py의 ALLOWED_HOSTS = ['*'] 설정해주기

==> 로컬에서 수정하였으면, git에 commit 후 다시 리눅스에서 pull해오기


4) 서버 실행하기

# python manage.py runserver 0.0.0.0:9999

하지만 여기서 오류가 발생했다.

views

바로 undefined symbol : PQescapeIndentifier -> psycopg 모듈을 찾을 수 없다는 오류.

하지만 해당 프로젝트의 가상환경 안에는 psycopg모듈이 잘 들어가있음을 확인했다.

여기서 오류 이유를 발견하고 해결할 수 있었다. (libpq 링크가 잘못 걸려있었다.)

해결방법

# cd /usr/lib64
# rm libpq.so.5  											# 링크삭제
# ln -s /usr/local/cafe24/pgsql/lib/libpq.so.5 libpq.so.5   # 링크다시걸기
# /etc/init.d/postgres stop								 	# 서버 재시작
# /etc/init.d/postgres start
views

접속 성공!!!!!



가상환경 영향 받지 않고 runserver 시키기

해당 프로젝트의 가상환경에서 나오고 프로젝트 상위폴더에서

python3 python_ch3/manage.py runserver 0.0.0.0:9999 를 입력하면 서버가 실행되지 않는다.

views

만약 가상환경을 실행하지 않고 django를 실행하고 싶다면,

venv안에 있는 lib를 프로젝트 바로 밑에 install해주면 된다.

# pip3 install -r python_ch3/requirements.txt --target=python_ch3

views

서버 실행 성공!!!


apache-django 연동 연습 (PYTHONPATH 설정 ⭕)

프로젝트 당겨오기 : # git clone https://github.com/jungeunlee95/django-basic.git

설정 이름으로 변경 : # mv django-basic/ python_ch3

프로젝트 바로 밑에 lib 다운: # pip3 install -r python_ch3/requirements.txt --target=/home/django/python_ch3

PYTHONPATH 지정 : # export PYTHONPATH='/home/django/python_ch3'

서버 재시작 : # /etc/init.d/httpd restart

views


apache-django 연동 연습 (PYTHONPATH 설정 ❌)

프로젝트 당겨오기 :# git clone https://github.com/jungeunlee95/django-basic.git

설정 이름으로 변경 :# mv django-basic/ python_ch3

프로젝트 바로 밑에 lib 다운: # pip3 install -r /home/django/python_ch3/requirements.txt --target=/home/django/python_ch3

PYTHONPATH 지정 해제 :# export PYTHONPATH=''

서버 재시작 : # /etc/init.d/httpd restart


이렇게 PYTHONPATH를 없애면 오류가 발생한다.

오류 확인해보기

로그 확인하기 : 해당 apache 설치 경로의 /logs/에서 확인할 수 있다.

views

ModuleNotFoundError : No module named ‘django’

장고 모듈을 확인할 수 없다.

이 오류는 장고 프로젝트의 wsgi.py에서 환경변수 설정 코드를 추가해야 해결할 수 있다.

import sys
# 프로세스 내에서만 사용하는 환경변수(프로세스가 내려가면 사라지는 path)
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

위의 코드를 넣어주고 서버를 재시작하면

views

접근 성공!!!!



8 리눅스에 apache와 django project 연동 전 TEST

|

시작하기 전,,

[1] apache port 확인하는 방법

리눅스에 아파치가 다운되어있는 경로의 conf/httpd.conf에서 확인할 수 있다.

views

/Listen 으로 검색하기

views

나는 80포트번호로 apache를 열어놓았다.


[2] apache와 tomcat AJP 연결 확인하는 방법

[root@localhost apache]# vi conf/workers_jk.properties 에서 확인할 수 있다.


[3] apache와 tomcat 매핑된 url 확인하는 방법

[root@localhost apache]# vi conf/uriworkermap.properties


[4] tomcat 프로젝트 로그 확인하는 방법

tomcat에 연결된 프로젝트의 디렉토리의 logs/에서 확인할 수 있다.

views

이 중 보고싶은 로그 파일 보기, -> catalina.out을 확인하면 된다.

[root@localhost logs]# tail -4000f catalina.out


[5] apache url 접근 확인하는 방법

apache 설치 경로의 logs를 확인하면 된다.

views

접근 url 보기 : [root@localhost logs]# tail -3000f access_log

error 로그 보기 : [root@localhost logs]# tail -3000f error_log


[6] tomcat과 연결된 프로젝트 port확인하는 방법

나는 이전에 tomcat-cafe24 폴더 밑에 여러가지 java 프로젝트를 넣어놨다.

프로젝트가 들어있는 tomcat의 /conf/server.xml을 살펴보면 확인할 수 있다.

views

vi로 들어간 뒤 /Connector port를 검색하면 찾을 수 있다.

views

현재 8080 port번호로 열려있음


[7] tomcat과 연결된 프로젝트 AJP port확인하는 방법

위와 똑같은 경로에서 /AJP를 검색하면 찾을 수 있다.

views

8009번으로 연결되어 있음


내가 방화벽을 열고있는 port 번호 확인하는 방법

vi /etc/sysconfig/iptables 에서 확인 가능

views



⭐ 리눅스에 아파치와 장고프로젝트 연동하기

apache-장고 에서는 장고 프로젝트의 wsgi.py파일로 실행된다.

리눅스 가상호스트를 이용해 다른 port를 사용해서 apache 멀티 포트 서비스를 사용했다.

(80 : java project, 8888: django project 사용)

아파치 Virtualhost 사용하기

🌹 [1] httpd.conf 수정

아파치 설치 경로 밑의conf/httpd.conf 수정

views

1) post 8888 추가하기

views


2) DocumentRoot 디렉토리 권한 설정 주석처리

가상 호스트를 사용할 것이기 때문에 DocumentRoot는 주석을 해준다.

views


3) Virtual Host 설정파일 주석 해제

virtualhost 사용을 위해 httpd-vhosts.conf를 사용할 것이기에 주석을 해제한다.

views


🌹 [2] httpd-vhosts.conf 설정

아파치 설치 경로 밑의conf/extra/httpd-vhosts.conf 설정

views

1) NameVirtualHost *:8888 추가

views


2) 기존의 80 포트 vhosts경로 설정

views


3) 8888 포트 vhosts경로 설정 - django project 설정

views

여기서 DocumentRoot에 설정해준 경로 /home/django/python_ch3 프로젝트를 만들어주자, 일단 git에서 장고 프로젝트를 가져오기전 test용으로 직접 디렉토리를 만들어서 테스트해보았다. ==> index.html만 만듦

views


🌹 [3] 8888 port 열기

port 여는 곳 : # vi /etc/sysconfig/iptables

views

서버 재시작 : # /etc/init.d/httpd stop, # /etc/init.d/httpd start

방화벽 재시작 : # /etc/init.d/iptables stop, # /etc/init.d/iptables start


🌹 [4] url 접속해서 확인해보기

기존의 80 port

views

django 프로젝트를 넣을 8888 port

views


⭐ [5] JKMountFile 설정

django-톰캣 연동과 함께 할 경우 JKMountFile 설정은

아파치 설치 경로 밑의conf/extra/httpd-vhosts.conf에 해야한다.

1) 아파치 설치 경로 밑의conf/httpd.conf 수정

JkMountFile conf/uriworkermap.properties 주석처리하기

views


2) 아파치 설치 경로 밑의conf/extra/httpd-vhosts.conf에 추가

80포트의 VirtualHost 설정 안에 넣어주면 된다.

views



7 리눅스에 python 의존성 경로 설정하기(export PYTHONPATH)

|

views

git에서 리눅스로 python 크롤링 프로젝트를 clone해왔다.

git 에서 리눅스로 python project 가져오는 방법

python-crawler에서 __main__.py를 실행하면 __result__/파일이름.csv로 저장되도록 코드를 작성했다.

__main__.py를 실행하기 위해서는 가상환경을 실행하고 다음 명령어를 치면 된다.

(venv) [root@localhost python-crawler]# python3 __main__.py


만약 프로젝트 밖에서 실행한다면,

(venv) [root@localhost python-projects]# python python-crawler

(자동으로 그 프로젝트의 __main__.py 실행)

오류가 발생한다. ( __results__ 디렉토리를 찾을 수 없음)


그 이유는, __main__.py에서 크롤링 데이터 저장 경로를

table.to_csv('__results__/nene.csv', encoding='utf-8', mode='w', index=0)로 설정했기 때문에, 프로젝트 밖에서는 실행할 수 없다. 이 경로를 절대 경로로 바꿔 주어야 한다.

python 모듈의 절대 경로 찾는 법

print(os.path.abspath(__file__))

<출력>
D:\dowork\PycharmProjects\python_crawler\__main__.py

우리는 __main__.py의 상위 경로를 찾은 뒤 __result__ 디렉토리를 찾아주어야 한다.


python 상위 디렉토리 경로 찾는 법

BASE_DIR = os.path.dirname(os.path.abspath(__file__))

<출력> D:\dowork\PycharmProjects\python_crawler

위의 크롤링 데이터 저장 경로를 다음과 같이 절대 경로로 변경하면 된다.

# 모듈의 절대위치 구하기(다른 환경에서 실행할 때)
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
RESULT_DIR = f'{BASE_DIR}/__results__'
table.to_csv(f'{RESULT_DIR}/nene.csv', encoding='utf-8', mode='w', index=0)

하지만, 저장 파일을 프로젝트 내부에 두지 않고, 리눅스 디렉토리에 넣고 싶어 다음 경로로 변경한뒤 리눅스의 root/밑에 crawling-results 디렉토리를 만들어주어 크롤링 데이터를 저장했다.

table.to_csv('/root/crawling-results/nene.csv', encoding='utf-8', mode='w', index=0) –> /root경로에 crawling-results 디렉토리 만들면 된다!



linux에서 venv 실행을 하지 않고 python apllication 실행하기

[1] PYTHONPATH=’application 의존성 경로’ 설정

1, git clone https://github.com/jungeunlee95/python-crawler.git

2, ` pip3 install -r python_crawler/requirements.txt –target=python_crawler/packages`

3, export PYTHONPATH='/root/python-projects/python_crawler/packages'

3, python3 python_crawler : 실행 성공!

views


[2] PYTHONPATH=’application 의존성 경로’ 설정

1, git clone https://github.com/jungeunlee95/python-crawler.git

2, ` pip3 install -r python-crawler/requirements.txt –target=python-crawler`

python 모듈을 프로젝트 바로 밑에 설치해주면, 굳이 PATH를 설정하지 않아도 된다.

3, python3 python-crawler : 실행 성공

views


[3] 압축

1, git clone https://github.com/jungeunlee95/python-crawler.git

2, ` pip3 install -r python-crawler/requirements.txt –target=python-crawler`

3, python3 -m zipapp python-crawler

4, python3 python-crawler.pyz : 압축파일 실행 시 오류가 생김

압축했을 때, numpy 오류가 생긴다.

views

프로젝트의 pandas와 numpy관련 코드를 주석처리 하고 다시 project를 pull 받으면 오류가 사라진다.. 이 이유는 더 찾아봐야 할 것 같다.


[4] 실행 가능 파일로 packing

1, git clone https://github.com/jungeunlee95/python-crawler.git

2, ` pip3 install -r python-crawler/requirements.txt –target=python-crawler`

3, python3 -m zipapp -p "/cafe24/python3.7/bin/python3" python-crawler

4, python3 python-crawler.pyz